Apache 的SSL憑證轉成tomcat的keystore

好一陣子之前做的
用途是把從憑證單位申請過來的SSL憑證,轉成tomcat認得的keystore格式。因為不是每一家憑證單位都support tomcat,如果不轉成keystore格式的話,跑https時就需要同時跑apache(mod_jk)+tomcat,蠻多此一舉的....
轉成tomcat的keystore後,就可以直接讓tomcat LISTEN 443了。
以下是做法:

首先先準備好以下CA檔:
CA.crt: 授權單位簽發的憑證檔
CA.chain.crt: 授權單位的中繼憑證
root.crt:授權單位的根憑證
httpd.key: private key

1.取得java class
wget ftp://ftp.mortbay.org/pub/jetty-6.1.x/jetty-6.1.3.zip

2.將授權單位的中繼憑證和根憑證合一:

cat CA.chain.crt root.crt > chainroot.crt

3.轉成 pkcs12

openssl pkcs12 -export -chain -in CA.crt -inkey httpd.key -name tomcat -CAfile chartroot.crt -caname root -out server.p12

會要求輸入密碼,不能空白,否則後面步驟會error

4.轉成 java的keystore
解開 jetty-6.1.3.zip

java -classpath jetty-6.1.3/lib/jetty-6.1.3.jar org.mortbay.jetty.security.PKCS12Import server.p12 server.jks

要求輸入密碼時也一樣一定要輸入

到此,給tomcat用的keystore已經做好了,接下來就是改tomcat的設定:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/etc/tomcat-6/server.jks" keystorePass="$keypassword"
/>


$keypassword 就是前面你在製作keystore過程中輸入的密碼
因為tomcat預設是不能用root運作,所以只能LISTEN >1024 的port,這邊設定是8443。只要再利用iptables 將443port倒到8443給tomcat處理就可以:

/sbin/iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j DNAT --to $yourip:8443
/sbin/iptables -A INPUT -p tcp -m state --state NEW --dport 443 -i eth0 -j ACCEPT

本篇發表於 系統相關 並標籤為 , , 。將永久鏈結加入書籤。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

*