騰訊雲Linux伺服器搭建(七) Apache+Tomcat+HTTPS加密的配置
前面已經在一個主機上安裝了apache+git+openssl,實現了git伺服器的https驗證。還安裝了tomcat,在tomcat上架起了tomcat manager,Jenkins,和微信小程式的後臺程式。由於微信小程式必須走https,而且必須用預設埠,所以需要把apache實現git的驗證訪問,並且和tomcat的https連線訪問。這裡選擇了用ajp來實現。
1,由於當初編譯apache的時候沒有選上ajp模組,所以選擇了從網上下載ajp模組,並放在 apachDir/modules目錄下
2,在apacheDir/conf目錄下新增workers.properties檔案,並新增如下內容:
該檔案中定義了3個worker,對應3個web應用,這裡只指向同一個tomcat,實際中可以指向不同的機器或不同的埠。
1 ps=/ 2 3 workers.tomcat_home=/usr/local/tomcat/ 4 workers.java_home=/usr/local/jdk 5 worker.list=worker1,worker2,worker3 6 7 worker.worker1.port=8009 8 worker.worker1.host=127.0.0.1 9 worker.worker1.type=ajp13 10 11 worker.worker2.port=8009 12 worker.worker2.host=127.0.0.1 13 worker.worker2.type=ajp13 14 15 worker.worker3.port=8009 16 worker.worker3.host=127.0.0.1 17 worker.worker3.type=ajp13
3,修改apacheDir/conf/extra/httpd-ssl.conf,在VirtualHost前面追加以下內容。
12 LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.6.so 13 JkWorkersFile /usr/local/apache2/conf/extra/workers.properties 14 JkLogFile jklog.log 15 JkLogLevel info 16 JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
4,在VirtualHost前面追加以下內容。
96 ScriptAlias /git/ /usr/local/git/libexec/git-core/git-http-backend/
97 JkMount /jpy/* worker1
98 JkMount /jenkins/* worker2
99 JkMount /manager/* worker3
5,至此Apache的指向tomcat的設定完成。apache的SSL設定參照《Centos上apache+git的https認證實現》
重啟後,用https://域名/manager/ https://域名/jenkins/ https://域名/jpy/ 都能訪問。https://域名/git/sample.git
6,現在實現了客戶端到apache的ssl加密,但是實際從tomcat返回的值還是明文傳送的,所以現在的https只實現了一半。如果需要完全實現https,還需要把tomcat配置上ssl加密。利用從阿里雲下載的tomcat用的證書。在Tomcat的安裝目錄下建立cert目錄,並且將下載的全部檔案拷貝到cert目錄中。
-rw-r--r-- 1 root root 1674 Jun 29 23:15 1530652701965.key
-rw-r--r-- 1 root root 3674 Jun 29 23:15 1530652701965.pem
-rw-r--r-- 1 root root 4546 Jun 29 23:15 1530652701965.pfx
-rw-r--r-- 1 root root 13 Jun 29 23:15 pfx-password.txt
7,找到安裝Tomcat目錄下該檔案server.xml,一般預設路徑都是在 conf 資料夾中。找到 <Connection port="8443"標籤,增加如下屬性:
keystoreFile="cert/1530652701965.pfx"
keystoreType="PKCS12"
#此處的證書密碼,請參考附件中的密碼檔案或在第1步中設定的密碼
keystorePass="證書密碼"
完整的配置如下,其中port屬性根據實際情況修改:
<Connector port="8443"
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="cert/1530652701965.pfx"
keystoreType="PKCS12"
keystorePass="證書密碼"
clientAuth="false"
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>
重啟 Tomcat後,小程式以及Jenkins,tomcat manager都能正常執行,到此大功告成。
遇到的坑:
1,第6步設定完之後,會出現,所有應用都有git一樣的apache的基本使用者驗證。研究了一下,把git的目錄單獨抽出來,另外三個jkmount單獨設定,重啟後,解決了。
96 ScriptAlias /git/ /usr/local/git/libexec/git-core/git-http-backend/
97 JkMount /jpy/* worker1
98 JkMount /jenkins/* worker2
99 JkMount /manager/* worker3
100 <Location /git-data/git>
101 AuthType Basic
102 AuthName "Git"
103 AuthUserFile /usr/local/apache2/conf/git-team.htpasswd
104 Require valid-user
105 </Location>