keytool+tomcat 單向/雙向認證的配置

一. Keytool簡單介紹

 

1.Keytool是一個Java數據證書的管理工具。

Keytool將密鑰(key)和證書(certificates)存在一個稱爲keystore的文件中java


2.在keystore裏,包含兩種數據:

密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(採用非對稱加密)
可信任的證書實體(trusted certificate entries)——只包含公鑰算法

 

3.Alias(別名)

每一個keystore都關聯這一個獨一無二的alias,這個alias一般不區分大小寫瀏覽器

 

4.keystore的存儲位置

在沒有制定生成位置的狀況下,keystore會存在與用戶的系統默認目錄,
如:對於window xp系統,會生成在系統的C:\Documents and Settings\UserName\
文件名爲「.keystore」tomcat

 


二. keystore的生成

keytool -genkey -dname "cn=programmer, ou=JavaSoft, o=Sun, c=US" -keyalg RSA  -keysize 1024 -alias tomcat -keypass 123456   -keystore C:\server.keystore -storepass 123456   -validity 3600
keytool -genkey                                                  -keyalg RSA  -keysize 1024 -alias tomcat -keypass changeit -keystore server.keystore    -storepass changeit -validity 3600

 
參數說明
-genkey 表示要建立一個新的密鑰
-dname 表示密鑰的Distinguished Names(用於代表密鑰的發行者身份)
    CN=commonName (普通名稱)
    OU=organizationUnit (組織單元)
    O=organizationName (組織名稱)
    L=localityName (地點)
    S=stateName (州名)
    C=country (國家名)
-keyalg 使用加密的算法,這裏是RSA
-alias 密鑰的別名
-keypass 私有密鑰的密碼,這裏設置爲123456
-keystore 密鑰保存在C:\下的.jks文件中
-storepass 存取密碼,這裏設置爲123456,這個密碼提供系統從.keystore文件中將信息取出,keystore密碼
-validity 該密鑰的有效期爲 3600天服務器

-storetype 證書格式PKCS12dom

 


 

三. 配置Tomcat服務器

打開Tomcat根目錄下的/conf/server.xml工具

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
		   maxThreads="150" scheme="https" secure="true"
		   clientAuth="false" sslProtocol="TLS"
		   keystoreFile="${catalina.base}\keystore\server.keystore" keystorePass="123456" />

 

四.  測試

1.測試證書測試

keytool -list -keystore .\server.keystore

 

2.啓動 Tomcat 並訪問 https://localhost:8443. 你將看到 Tomcat 默認的首頁。ui

須要注意的是,若是你訪問默認的 8080 端口,仍是有效的。加密

 

五.雙向認證

 

1. 生成證書及添加受信任的證書

 

 

-- 爲服務器生成證書
>keytool -genkey -dname "cn=programmer, ou=JavaSoft, o=Sun, c=US" -keyalg RSA  -keysize 1024 -alias tomcat -keypass 123456 -keystore ./server.keystore -storepass 123456   -validity 3600

-- 單向時沒有這步
-- 爲客戶端生成證書
-- 雙擊.p12文件,按照提示安裝證書,將證書填入到「受信任的根證書頒發機構」
>keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore ./client.p12 -dname "cn=programmer, ou=JavaSoft, o=Sun, c=US"

-- 單向時沒有這步
-- 必須把客戶端證書添加爲服務器的信任認證。因爲不能直接將PKCS12格式的證書庫導入,必須先把客戶端證書導出爲一個單獨的CER文件
>keytool -export -alias client -keystore ./client.p12 -storetype PKCS12 -storepass 123456 -rfc -file ./client.cer

-- 單向時沒有這步
-- 將該文件導入到服務器的證書庫,添加爲一個信任證書
>keytool -import -v -file ./client.cer -keystore ./server.keystore

-- 經過list命令查看服務器的證書庫,能夠看到兩個證書,一個是服務器證書,一個是受信任的客戶端證書
>keytool -list -keystore ./server.keystore

-- 單向時沒有這步
-- 把服務器證書導出爲一個單獨的CER文件,使用以下命令
-- 雙擊.cer文件,按照提示安裝證書,將證書填入到「受信任的根證書頒發機構」
>keytool -keystore ./server.keystore -export -alias tomcat -file ./server.cer 

 

 

 2.配置Tomcat服務器

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
		   maxThreads="150" scheme="https" secure="true"
		   clientAuth="true" sslProtocol="TLS"
		   keystoreFile="${catalina.base}\keystore\server.keystore" keystorePass="123456" 
		   truststoreFile="${catalina.base}\keystore\server.keystore" truststorePass="123456" />

 clientAuth:true是指雙向驗證,單項時爲false

附件爲一個完成雙向認證配置的Tomcat,瀏覽器訪問須要安裝\keystore\client.p12

 

 

六.爲Java環境導入服務器公鑰(爲客戶端的JVM導入證書)

 

1.C:\Windows\System32\drivers\etc\hosts文件中映射一個虛擬域名,好比

 

 

127.0.0.1  sso.gqshao.com
 

 

2.生成keystore,導出證書,在導入到Java環境中,注意生成keystore時參數-dname中cn,須要是本機域名,能夠使用上面配的虛擬域名

 

-- 驗證是否存在同名證書
keytool -list -v -alias tomcat -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass 123456

-- 生成keystore
keytool -genkey -dname "cn=sso.gqshao.com, ou=JavaSoft, o=Sun, c=US" -keyalg RSA  -keysize 1024 -alias tomcat -keypass 123456 -keystore ./tomcat.keystore -storepass 123456   -validity 3600

-- 導出證書
keytool -export -file ./tomcat.crt -alias tomcat -keystore ./tomcat.keystore

-- 爲客戶端的JVM導入證書
keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file tomcat.crt -alias tomcat -storepass 123456
-- 是否導入輸入 y

-- 刪除JVM證書
keytool -delete -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -alias tomcat -storepass 123456
注意:keytool錯誤: java.io.IOException: Keystore was tampered with, or password was incorrect,解決方法%JAVA_HOME%\jre\lib\security\下cacerts文件刪除掉
hosts: C:\Windows\System32\drivers\etc\hosts(Linux中是 /etc/hosts )文件中中添加 127.0.0.1 sso.gqshao.com
相關文章
相關標籤/搜索