1. 程式人生 > >用jdk生成ssl證書

用jdk生成ssl證書

C:\Program Files\Java\jdk1.8.0_131\bin>keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\keys\tomcat.keystore -validity 36500
輸入金鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什麼?
  [Unknown]:  weixin.xxx.com
您的組織單位名稱是什麼?
  [Unknown]:
您的組織名稱是什麼?
  [Unknown]:
您所在的城市或區域名稱是什麼?
  [Unknown]:
您所在的省/市/自治區名稱是什麼?
  [Unknown]:
該單位的雙字母國家/地區程式碼是什麼?
  [Unknown]:
CN=weixin.xxx.com, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正確?
  [否]:  y

正在為以下物件生成 2,048 位RSA金鑰對和自簽名證書 (SHA256withRSA) (有效期為 36,500 天):
         CN=weixin.xxx.com, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
輸入 <tomcat> 的金鑰口令
        (如果和金鑰庫口令相同, 按回車):
[正在儲存D:\keys\tomcat.keystore]

找到tomcat目錄下的conf/server.xml

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
				keystorefile="D:/keys/tomcat.keystore" keystorepass="1234567" />

嘗試啟動tomcat,報錯:

 Failed to load keystore type JKS with path C:\Users\36400/.keystore due to C:\Users\36400\.keystore (系統找不到指定的檔案。)
java.io.FileNotFoundException: C:\Users\36400\.keystore (系統找不到指定的檔案。)

解決:

keytool -genkey -alias tomcat -keyalg RSA
輸入金鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什麼?
  [Unknown]:  weixin.xxx.com
您的組織單位名稱是什麼?
  [Unknown]:
您的組織名稱是什麼?
  [Unknown]:
您所在的城市或區域名稱是什麼?
  [Unknown]:
您所在的省/市/自治區名稱是什麼?
  [Unknown]:
該單位的雙字母國家/地區程式碼是什麼?
  [Unknown]:
CN=weixin.xxx.com, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正確?
  [否]:  y

輸入 <tomcat> 的金鑰口令
        (如果和金鑰庫口令相同, 按回車):

再次重啟tomcat,訪問https://127.0.0.1:8443/

這樣還沒有結束,除了https://127.0.0.1:8443/可以開啟tomcat主頁面外,http://127.0.0.1:8080/ 也可以開啟。

這需要將訪問8080埠的請求強制跳轉到8443埠,開啟tomcat目錄下conf/web.xml,在倒數第二行新增:

	<security-constraint>
		<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,發現http的請求會自動轉換成https。