setup jira using ssl on apache reverse proxy

URL Link //n.sfs.tw/12125

2018-01-18 14:45:08 By jung

##2019新增

jira的線上商店marketplace在設定完轉址後始終無法連上

試了很久終於發現~是rewrite rule出錯了

以下是正確的設定,到httpd/conf.d/下面的jira設定檔

RewriteRule (.*) http://127.0.0.1:8080%{REQUEST_URI} [P,QSA] ###之前就是在[ ]標籤多了一個L,代表只要符合這條件就不再檢查,於是marketplace無法使用下面轉址回到proxy設定好的jira頁面@@
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

 

在設定JIRA使用https連線上

網路上的文件都是直接使用http連jira目錄的做法

reverse proxy不用照這麼多步驟

首先照certbot安裝好SSL憑證

https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-centos-7

在取得憑證的過程中,選擇強制將所有連線轉到https

這樣certbot會幫apache產生一個XX-le-ssl.conf的設定檔

自動開啟Rewrite功能並把ssl憑證檔案路徑加上去

接下來,在原本80轉8080的reverse proxy設定檔那邊

把原本引導轉埠的設定註解取消,只留下設定讀取權限的部分  

<VirtualHost *:80>

ServerName jira.teliclab.info

ProxyRequests Off

ProxyVia Off

<Proxy *> Require all granted </Proxy>

##註解掉原本的reverse proxy 設定 ##

RewriteEngine on

RewriteCond %{SERVER_NAME} =jira.teliclab.info

RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>

##注意apache2.2沒有[END]參數,建議改成

RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

##

完成後重啟apache就可以了

apachectl restart

原本以為這樣就結束了!

沒想到jira的server.xml要改正,否則jira會說你不適用https連線的畫面

然後使用者登入就看不到動態牆@@

但是很重要的是! 一定要等jira完全關閉才能更改server.xml

否則無法載入修改後的設定值喔!

先到/opt/atlassian/jira/bin/使用sh腳本(stop-jira.sh&shutdown.sh)關閉jira

或用/etc/init.d/jira stop

執行完其實jira並沒有關閉,還留著一個pid

建議用jiraForceShutdownScript1.sh + jiraForceShutdownScript2.sh再執行一次

最後再用ps -aux | grep 'jira'檢查,確定完全沒有任何jira程序在執行(jira會連結mysql所以mysql還會看到jira字眼,不用理會)

完全停止jira後

到/opt/atlassian/jira/conf修改server.xml檔案,參考官方文件

https://confluence.atlassian.com/adminjiraserver073/integrating-jira-with-apache-using-ssl-861253896.html

重點是把scheme, proxyname, proxyport改對

scheme="https" proxyName="yuor proxy server hostname" proxyPort="443"

存檔後就是要重新啟動jira

我試了很多種方法,最後發現直接用/opt/atlassian/jira/bin下面的startup.sh最直接

這樣才是真的完成了Orz

 

接下來取得了SSL正式憑證

有二個檔案必須修改,先將jira服務停止

1.apache的ssl.conf,告訴apache如何取得憑證檔案

SSLCertificateFile /etc/pki/tls/certs/server.cer ###domain name通過ssl憑證
SSLCertificateKeyFile /etc/pki/tls/private/privatekey2019.key ###CA發的私鑰
SSLCertificateChainFile /etc/pki/tls/certs/uca.cer ###CA發的chain
SSLCACertificateFile /etc/pki/tls/certs/root.cer ###CA發的根網域憑證

 

2.產生java用的jks匯入java (但做完我的jira還是沒有通過一些SSL檢測網站的java程式SSL測試@@)

###alias名稱指的是在jks檔中記錄加密方式的欄位
###引入root uca server紀錄加到jks檔
1./opt/atlassian/jira/jre/bin/keytool -import -trustcacerts -alias rootca -keystore /opt/atlassian/jira/jre/lib/security/jira2019.jks -file /home/jung915/jira_ssl/root.cer
2./opt/atlassian/jira/jre/bin/keytool -import -trustcacerts -alias uca -keystore /opt/atlassian/jira/jre/lib/security/jira2019.jks -file /home/jung915/jira_ssl/uca.cer
3./opt/atlassian/jira/jre/bin/keytool -import -trustcacerts -alias jira2019 -keystore /opt/atlassian/jira/jre/lib/security/jira2019.jks -file /home/jung915/20181108ssl/server.cer
###先把root uca二個檔案合併
cat root.cer uca.cer > all.crt
###加入私鑰檔產生p12格式的加密內容
openssl pkcs12 -export -chain -in server.cer -inkey privatekey.key -out jira2019.p12 -name jira2019 -CAfile all.crt
###使用p12檔製作jks
/opt/atlassian/jira/jre/bin/keytool -importkeystore -destkeystore /opt/atlassian/jira/jre/lib/security/jira2019.jks -srckeystore jira2019.p12 -alias jira2019
###這邊就是我搞不懂的地方了,公私鑰都加入了但是順序要怎麼做才對?

因為用p12製作jks的時候,會問你alias已經存在,是否要覆蓋

所以我認為正確解法應該是前面1-3引入憑證檔的步驟不需要了

直接產生p12檔然後做成jks匯入jira就可以

預設password: changeit

 

3.修改server.xml裡面keystore指定jks檔案的位置

最後重新啟動jira