天天看點

使用jdk自帶的工具生成數字證書

一、為伺服器生成證書

keytool -genkey -alias tomcat -keyalg RSA -keystore /www/wdlinux/my.keystore -dname "CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN" -keypass changeit -storepass changeit -validity 36500

-genkey表示要建立一個新的密鑰

-alias密鑰的别名

-keyalg使用加密的算法,這裡是RSA

-keystore 密鑰儲存在D:盤目錄下的mykeystore檔案中

-keypass私有密鑰的密碼,這裡設定為changeit

-storepass 存取密碼,這裡設定為changeit,這個密碼提供系統從mykeystore檔案中将資訊取出 

-validity該密鑰的有效期為 36500表示100年 (預設為90天) 

使用-dname一次性将參數填寫完。

-dname表示密鑰的Distinguished Names, 

CN=mytomcat.com 

OU=mytomcat.com 

O=mytomcat.com 

L=SH 

S=SH 

C=CN 

Distinguished Names表明了密鑰的發行者身份

輸入密鑰庫密碼:
再次輸入新密碼:
您的名字與姓氏是什麼?
  [Unknown]:  mytomcat.com        # 此處要寫域名或者:  localhost
您的組織機關名稱是什麼?
  [Unknown]:  mytomcat.com
您的組織名稱是什麼?
  [Unknown]:  mytomcat.com
您所在的城市或區域名稱是什麼?
  [Unknown]:  SH
您所在的省/市/自治區名稱是什麼?
  [Unknown]:  SH
該機關的雙字母國家/地區代碼是什麼?
  [Unknown]:  CN
CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN是否正确?
  [否]:  y
 
正在為以下對象生成 2,048 位RSA密鑰對和自簽名證書 (SHA256withRSA) (有效期為 36,50
0 天):
         CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN
輸入 <tomcat> 的密鑰密碼
        (如果和密鑰庫密碼相同, 按回車):
再次輸入新密碼:
[正在存儲/www/wdlinux/my.keystore]
 
           

将mytomcat.com寫入/etc/hosts中, 127.0.0.1 mytomcat.com 

使用jdk自帶的工具生成數字證書

二、為用戶端生成證書

keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12  -keystore /www/wdlinux/client.p12 -validity 36500 

"CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN"

三. 讓伺服器信任用戶端證書

keytool -export -alias client -keystore /www/wdlinux/client.p12 -storetype PKCS12  -storepass changeit -rfc -file /www/wdlinux/clientforserver.cer

  • 将該檔案導入到伺服器的證書庫,添加為一個信任證書:

keytool -import -v -file /www/wdlinux/clientforserver.cer -keystore /www/wdlinux/tomcat.keystore

  • 檢視證書資訊:完成之後通過list指令檢視伺服器的證書庫,可以看到兩個證書,一個是伺服器證書,一個是受信任的用戶端證書:

keytool -list -v -keystore /www/wdlinux/my.keystore -storepass changeit

使用jdk自帶的工具生成數字證書

四、讓用戶端信任伺服器證書

keytool -export -alias tomcat -keystore /www/wdlinux/my.keystore -file /www/wdlinux/CA.cer

五、用戶端安裝證書

現得到如下四個證書檔案

CA.cer

client.p12

clientforserver.cer

my.keystore

使用jdk自帶的工具生成數字證書

注:在用戶端輕按兩下運作client.p12,一直點選下一步,直到顯示導入成功。

六、修改tomcat參數釋出服務

tomcat/bin/server.xml中修改

1、注釋掉8080端口配置  (不是必須,也可以不注釋,不注釋的話,則http 8080端口也可以通路)

<!--<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />-->
           

2、取消注釋8443端口配置,修改内容:

tomcat8.5版本以上修改方式:

tomcat8.5以上版本的修改方式:
将
 <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
修改成:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" 
               keystoreFile="/www/wdlinux/my.keystore" keystorePass="changeit"
               >
        <!--<SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>-->
    </Connector>
           

tomcat8.0版本修改方式:

tomcat8.0的server.xml檔案應該這樣改動:

server.xml配置:
将
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
         maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
         clientAuth="false" sslProtocol="TLS" />
修改成:
<Connector  port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
clientAuth="true"
sslProtocol="TLS"
keystoreFile="/www/wdlinux/my.keystore"
keystorePass="changeit"
truststoreFile="/www/wdlinux/my.keystore"
truststorePass="changeit" />

屬性說明:
clientAuth:設定是否雙向驗證,預設為false,設定為true代表雙向驗證
keystoreFile:伺服器證書檔案路徑
keystorePass:伺服器證書密碼
truststoreFile:用來驗證用戶端證書的根證書,此例中就是伺服器證書
truststorePass:根證書密碼
注意:
① 設定clientAuth屬性為True時,需要手動導入用戶端證書才能通路。
② 要通路https請求 需要通路8443端口,通路http請求則通路Tomcat預設端口(你自己設定的端口,預設8080)即可。
           

注:強制https通路

在 tomcat /conf/web.xml 中的 </welcome- file-list> 後面加上這
<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>