原文來自:http://liujy1111.blog.163.com/blog/static/49739712008842372293/
不過我按照上面的步驟做下來,https的服務起不來,總是提示認證檔案不存在或者格式非法。搞了好久終於搞定了,在這裡總結一下。
環境資訊:
軟體 版本 安裝路徑
Tomcat apache-tomcat-7.0.11 D:/tomcat/apache-tomcat-7.0.11
OpenSSL OpenSSL 0.9.8k 25 Mar 2009 D:/OpenSSL
JDK jdk1.6.0_12 D:/Program Files/Java/jdk1.6.0_12
說明:
我的Openssl使用的是工具包,就是目錄下只有一些exe檔案和.manifest檔案什麼的。根據後面步驟的需要我們還需要做如下工作。
1、從Openssl的帶原始碼的完整包的openssl-x.x.x/apps目錄下拷貝一個Openssl.cnf設定檔放在D:/OpenSSL下
2、在D:/OpenSSL下面建立ca、jks、server、client四個檔案夾。
3、下面步驟中紅色標識的是我曾經遇到的問題,或者跟原文不一樣的地方。
開始:
一:產生CA認證
目前不使用第三方權威機構的CA來認證,自己充當CA的角色。
網上下載一個openssl軟體
1. 建立私密金鑰 :
D:/OpenSSL>openssl genrsa -out ca/ca-key.pem 1024
2.建立認證請求 :
注意:這一步我執行是提示缺少openssl檔案,這就是為什麼我們需要拷貝一個openssl.cnf檔案到這裡的原因。
當然也可以使用 -config 參數指定一個別的完整路徑或者自己寫一個簡單的設定檔。偶是不會寫啦^_^
D:/OpenSSL>openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem -config openssl.cnf
-----
Country Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:zhejiang
Locality Name (eg, city) []:hangzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:skyvision
Organizational Unit Name (eg, section) []:test
Common Name (eg, YOUR name) []:root
Email Address []:sky
3.自簽署認證 :
D:/OpenSSL>openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 3650
4.將認證匯出成瀏覽器支援的.p12格式 :
D:/OpenSSL>openssl pkcs12 -export -clcerts -in ca/ca-cert.pem -inkey ca/ca-key.pem -out ca/ca.p12
密碼:changeit
二.產生server認證。
1.建立私密金鑰 :
D:/OpenSSL>openssl genrsa -out server/server-key.pem 1024
2.建立認證請求 :
D:/OpenSSL>openssl req -new -out server/server-req.csr -key server/server-key.pem -config openssl.cnf
-----
Country Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:zhejiang
Locality Name (eg, city) []:hangzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:skyvision
Organizational Unit Name (eg, section) []:test
Common Name (eg, YOUR name) []:localhost
注釋:一定要寫伺服器所在的ip
地址 //紅色這裡是本機測試,所以我寫localhost
Email Address []:sky
3.自簽署認證 :
D:/OpenSSL>openssl x509 -req -in
server/server-req.csr -out server/server-cert.pem -signkey
server/server-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem
-CAcreateserial -days 3650
4.將認證匯出成瀏覽器支援的.p12格式 :
D:/OpenSSL>openssl pkcs12 -export
-clcerts -in server/server-cert.pem -inkey server/server-key.pem -out
server/server.p12
密碼:changeit
三.產生client認證。
1.建立私密金鑰 :
D:/OpenSSL>openssl genrsa -out client/client-key.pem 1024
2.建立認證請求 :
D:/OpenSSL>openssl req -new -out client/client-req.csr -key client/client-key.pem -config openssl.cnf
-----
Country Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:zhejiang
Locality Name (eg, city) []:hangzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:skyvision
Organizational Unit Name (eg, section) []:test
Common Name (eg, YOUR name) []:sky
Email Address []:sky
注釋:就是登入中心的使用者(本來使用者名稱應該是Common Name
,但是中山公安的不知道為什麼使用的Email Address
,其他版本沒有測試)
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:tsing
3.自簽署認證 :
D:/OpenSSL>openssl x509 -req -in
client/client-req.csr -out client/client-cert.pem -signkey
client/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem
-CAcreateserial -days 3650
4.將認證匯出成瀏覽器支援的.p12格式 :
D:/OpenSSL>openssl pkcs12 -export
-clcerts -in client/client-cert.pem -inkey client/client-key.pem -out
client/client.p12
密碼:changeit
四.根據ca認證產生jks檔案
D:/OpenSSL> keytool
-keystore C:/openssl/bin/jks/truststore.jks -keypass 222222 -storepass
222222 -alias ca -import -trustcacerts -file
C:/openssl/bin/ca/ca-cert.pem
五.配置tomcat ssl
修改conf/server.xml。原文是5.5和6.0版本的配置,我用的是7.0,配置如下。
xml 代碼
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="server.p12
" keystorePass="changeit" keystoreType="PKCS12"
truststoreFile="truststore.jks
" truststorePass="222222" truststoreType="JKS"
SSLCertificateFile="../server-cert.pem"
SSLCertificateKeyFile="../server-key.pem"
/>
紅色部分的配置原文沒有提到,我在啟動tomcat時總是提示認證不存在或者格式非法,搞了好久=.=!
後來在協助文檔中看到這兩個配置才找到原因。
這裡使用到了四個檔案,各個檔案都是在前面的步驟中產生的。四個檔案都是放在tomcat的根目錄下。
藍色標識的server.p12和truststore.jks這兩個檔案需要放在tomcat的根目錄下。
紅色的server-cert.pem和server-key.pem預設是放在tomcat的bin檔案夾下的,我放在了根目錄下,所以這裡使用了相對路徑../。
六.匯入認證
將ca.p12,client.p12分別匯入到IE中去(開啟IE->;Internet選項->內容->認證)。
ca.p12匯入至可信任的根憑證授權單位,client.p12匯入至個人
七.驗證ssl配置是否正確訪問你的應用http://localhost
:8443/
,如果配置正確的話會出現請求你數位憑證的對話方塊。
驗證:
在我驗證時,我沒有匯入ca.p12和client.p12也能訪問http://localhost:8443,只是提示認證不安全。安裝了以後也沒有變化。是不是沒有對用戶端進行驗證?