https單向/雙向認證及tomcat配置https方法
tomcat6配置:
1.單向認證,就是傳輸的數據加密過了,但是不會校驗客戶端的來源
2.雙向認證,如果客戶端瀏覽器沒有導入客戶端證書,是訪問不了web系統的,找不到地址
如果只是加密,單向就行
如果想要用系統的人沒有證書就訪問不了系統的話,就採用雙向
命令格式:
輸入名字、組織單位、組織、市、省、國家等信息
keytool -genkeypair -alias tomcat -keyalg RSA -keysize 1024 -dname "CN=localhost, OU=Organization, O=Company Name, L=City, S=State, C=US" -validity 365 -keystore e:/tomcat.keystore
單向配置:
第一步:爲服務器生成證書
使用keytool爲Tomcat生成證書,假定目標機器的域名是“localhost”,keystore文件存放在“C:\OctopusStoreKey\SP2014.keystore”,口令爲“123456”,使用如下命令生成:
keytool -genkey -v -alias SPClient -keyalg RSA -validity 3650 -keystore c:\OctopusStoreKey\SP2014.keystore
或
keytool -genkey -v -alias SPClient -keyalg RSA -validity 3650 -keystore c:\OctopusStoreKey\SP2014.keystore -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass 123456 -keypass 123456
生成安全證書文件
這個SP2014CA.cer是爲了解決不信任時要導入的
keytool -export -alias SP0200 -file c:\OctopusStoreKey\SP2014CA.cer -keystore c:\OctopusStoreKey\SP2014.keystore -validity 3650
然後輸入c:\OctopusStoreKey\SP2014.keystore 中的keystore密碼
或
keytool -export -alias tomcat -keystore c:\tomcat.keystore -file c:\tomcat.cer -storepass password
打開Tomcat 根目錄下的 /conf/server.xml ,找到如下配置段,修改如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="c:\OctopusStoreKey\SP2014.keystore" keystorePass="123456" >
注意:protocol裏面的值,如果用http 1.1,那麼https的鏈接就會打不開
需要在應用程序的web.xml可以加上這句話
<login-config> <!-- Authorization setting for SSL --> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection> <web-resource-name>SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
然後啓動tomcat,輸入 https://localhost:8443/
這時打開會彈出一個提示框:證書不可信任,有一個警告,說什麼需要機構頒發。直接導入SP2014CA.cer即可
雙向配置:
第一步:爲服務器生成證書
使用keytool爲Tomcat生成證書,假定目標機器的域名是“localhost”,keystore文件存放在“C:\OctopusStoreKey\SP2014.keystore”,口令爲“123456”,使用如下命令生成:
keytool -genkeypair -alias tomcat -keyalg RSA -keysize 1024 -dname "CN=localhost, OU=Organization, O=Company Name, L=City, S=State, C=US" -validity 365 -keystore e:/tomcat.keystore
或
keytool -genkey -v -alias SPClient -keyalg RSA -validity 3650 -keystore c:\OctopusStoreKey\SP2014.keystore -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass 123456 -keypass 123456
第二步:爲客戶端生成證書
下一步是爲瀏覽器生成證書,以便讓服務器來驗證它。爲了能將證書順利導入至IE 和 Firefox ,證書格式應該是 PKCS12 ,因此,使用如下命令生成:
keytool -genkey -v -alias SP0200 -keyalg RSA -storetype PKCS12 -keystore c:\OctopusStoreKey\SP2014.p12(SP0200爲自定義)。
或
keytool -genkey -v -alias SP0200 -keyalg RSA -storetype PKCS12 -validity 3650 -keystore c:\OctopusStoreKey\SP2014.p12 -dname "CN=SP0200,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass 123456 -keypass 123456
雙擊SP2014.p12文件,即可將證書導入至瀏覽器(客戶端)。
第三步:讓服務器信任客戶端證書
由於是雙向SSL認證,服務器必須要信任客戶端證書,因此,必須把客戶端證書添加爲服務器的信任認證。由於不能直接將PKCS12格式的證書庫導入,必須先把客戶端證書導出爲一個單獨的CER文件,使用如下命令:
keytool -export -alias SP0200 -keystore c:\OctopusStoreKey\SP2014.p12 -storetype PKCS12 -storepass 123456 -rfc -file C:\OctopusStoreKey\SP2014SubCA.cer
(SP0200爲自定義與客戶端定義的SP0200要一致,password是你設置的密碼)。通過以上命令,客戶端證書就被我們導出到“C:\OctopusStoreKey\SP2014SubCA.cer”文件了。
下一步,是將該文件導入到服務器的證書庫,添加爲一個信任證書使用命令如下:
keytool -import -v -file C:\OctopusStoreKey\SP2014SubCA.cer -keystore C:\OctopusStoreKey\SP2014.keystore
通過list命令查看服務器的證書庫,可以看到兩個證書,一個是服務器證書,一個是受信任的客戶端證書:
keytool -list -keystore C:\OctopusStoreKey\SP2014.keystore
第四步:配置Tomcat 服務器
打開Tomcat 根目錄下的 /conf/server.xml ,找到如下配置段,修改如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS"
keystoreFile="C:\OctopusStoreKey\SP2014.keystore" keystorePass="123456"
truststoreFile="C:\OctopusStoreKey\SP2014.keystore" truststorePass="123456"/>
(SP2014要與生成的服務端證書名一致)
屬性說明:
clientAuth:設置是否雙向驗證,默認爲false,設置爲true代表雙向驗證
keystoreFile:服務器證書文件路徑
keystorePass:服務器證書密碼
truststoreFile:用來驗證客戶端證書的根證書,此例中就是服務器證書
truststorePass:根證書密碼
應用程序的web.xml可以加上這句話:
<login-config> <!-- Authorization setting for SSL --> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection> <web-resource-name>SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> <!-- Require HTTPS for everything except /img (favicon) and /css. --> <security-constraint> <web-resource-collection> <web-resource-name>HTTPSOrHTTP</web-resource-name> <url-pattern>*.ico</url-pattern> <url-pattern>/img/*</url-pattern> <url-pattern>/css/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint>
測試
在瀏覽器中輸入:https://localhost:8443/,會彈出選擇客戶端證書界面,點擊“確定”,會進入tomcat主頁,地址欄後會有“鎖”圖標,表示本次會話已經通過HTTPS雙向驗證,接下來的會話過程中所傳輸的信息都已經過SSL信息加密。