Ubuntu 設定 Apache + Tomcat + SSL 憑證

因為開發的網站牽涉到金流問題,因此必須使用https安全通道來傳送資料,原本主機上就有Apache Web Server走80 port,以及Apacha Tomcat走8080 port,但是當一遇到要走https後狀況就變複雜了,因為在Apache Web Server是443 port,而Tomcat是8443 port,原本使用ProxyPass將http 80 port轉到Tomcat 8080 port的方法似乎不能同理用在https上。解決方式是必須透過Apache VirtualHost的SSL設定,並使用ajp的方式轉換到Tomcat上。

1.安裝 OpenSSL
sudo apt-get install openssl

2.啟用SSL
sudo a2enmod ssl
(如果要停用 sudo a2dismod ssl)

3.安裝憑證
這一步驟先教大家產生自己的私人憑證,壞處是當你用https連線時,瀏覽器會出現警告訊息,這是因為憑證沒有經過第三方公司認證過,最好的作法就是去購買一個已經認證過的憑證或是使用StartSSL的免費憑證服務(https://www.startssl.com/),這部份可以參考(http://blog.mowd.tw/index.php?pl=950)
3.1.建立憑證目錄
sudo mkdir /etc/apache2/ssl
3.2.產生憑證
openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.key
(-days 後面的參數365是憑證的有效日期,可以依需要自行調整,-out 和 –keyout 是憑證和金鑰產出後要存放的路徑。)

4.修改虛擬主機設定
這一段是原本80 port透過ajp轉到tomcat的設定
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
ServerName 127.0.0.1
</VirtualHost>


這一段則是將https轉到tomcat的https且不用轉到tomcat:8443的port
<VirtualHost *:443>
SSLEngine on
#使用自己產生的憑證
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
#以下設定是使用StartSSL產生的檔案用
#SSLCertificateFile /etc/apache2/ssl/ssl.crt
#SSLCertificateKeyFile /etc/apache2/ssl/ssl.key
#SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
#SSLCACertificateFile /etc/apache2/ssl/ca.pem

ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
ServerName 127.0.0.1

</VirtualHost>

如此一來就可以同時使用http與https透過apache來轉址到tomcat上
5.重新啟動apache