Tomcat配置HTTPS

卡卡西村長發表於2017-01-11

1、生成伺服器端證照檔案
keytool -genkey -alias tomcat -keyalg RSA -keystore /root/cert/tomcat.keystore -validity 36500

引數簡要說明:“/root/cert/tomcat.keystore”是證照檔名 ;“-validity 36500”含義是證照有效期,36500表示100年,預設值是90天

Enter keystore password:  [password]
Re-enter new password: [password]
What is your first and last name?
  [Unknown]:  test.xxx.cn
What is the name of your organizational unit?
  [Unknown]:  xxx.cn
What is the name of your organization?
  [Unknown]:  xxx
What is the name of your City or Locality?
  [Unknown]:  shanghai
What is the name of your State or Province?
  [Unknown]:  shanghai
What is the two-letter country code for this unit?
  [Unknown]:  zh
Is CN=test.xxx.cn, OU=xxx.cn, O=xxx, L=shanghai, ST=shanghai, C=zh correct?
  [no]:  yes

Enter key password for <[password]>
        (RETURN if same as keystore password):  這裡建議不輸入密碼,直接回車

2、配置TOMCAT伺服器
開啟$CATALINA_HOME/conf/server.xml,修改如下,
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
修改引數=>
<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />
 
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
              maxThreads="150" scheme="https" secure="true"
              clientAuth="false" sslProtocol="TLS"/>
 -->
去掉註釋且修改引數=>
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" keystoreFile="/etc/tomcat.keystore" keystorePass="[password]"/>
註釋:標識為淡藍色的兩個引數,分別是證照檔案的位置和證照密碼,在證照檔案生成過程中做了設定
<!--
   <Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="8443" />
-->
修改引數=>
<Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="443" />
(3) 開啟$CATALINA_HOME/conf/web.xml,在該檔案末尾增加:
2.強制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>

3、上述配置完成後,重啟TOMCAT後即可以使用SSL。IE位址列中可以直接輸入地址不必輸入“http://” 或者 “https://” ;也可以輸入 “http:// ” 會跳轉成為 “https://” 來登入
4、注意事項:
(1)    生成證照的時間,如果IE客戶端所在機器的時間早於證照生效時間,或者晚於有效時間,IE會提示“該安全證照已到期或還未生效”
(2)    如果IE提示“安全證照上的名稱無效或者與站點名稱不匹配”,則是由生成證照時填寫的伺服器所在主機的域名“您的名字與姓氏是什麼?”/“What is your first and last name?”不正確引起的
--------------------------------------------------------

如果要用於阿里雲的SLB,需要再處理一下。


以對應生成的 tomcat.keystore、密碼tomcat,別名tomcat,test.xxx.cn證照 為例

1、從JKS的keystore中匯出public key (certificate)
keytool -export -alias tomcat -keystore tomcat.keystore -file test.crt

2、轉換成PEM格式
openssl x509 -out wx-dev.crt -outform pem -text -in test-pem.crt -inform der

3、匯出private key
java ExportPriv tomcat.keystore tomcat tomcat > test-pkcs8.key

4、轉成RSA格式的私鑰
openssl rsa -inform PEM -in test-pkcs8.key -out test-pem.key
阿里雲伺服器證照配置,需要 test-pem.crt(公鑰)和test-pem.key(私鑰),在負載均衡(SLB)裡的證照管理介面

5、補充:可以把得到的public key(certificate) 和private key打包在一起,轉換成windows平臺常用的PKCS12格式

openssl pkcs12 -export -out test.pfx -inkey test-pem.key -in wx-dev-pem.crt
密碼 tomcat

 

如果透過阿里雲SLB配置https,還有更簡單的辦法,參見連結:

http://www.cnblogs.com/lavezhang/p/6277185.html

相關文章