之前一直用 HTTP,但覺得 HTTP 很不安全,所以趁著這次升級 Sonatype Nexus 的時候,一併來實驗啟用 HTTPS。
環境
在本篇中,使用的 Nexus 2 版本是 2.14.09-01,Java 執行環境是 OpenJDK 1.8.0_181。
準備 Keystore
Sonatype Nexus 2 是內嵌了一個 Jetty 伺服器作為網頁伺服器,因為 Jetty 是 Java Application Server,所以自然需要支援 HTTPS 時需要的是 Keystore 檔案。如果說使用情境跟我一樣是使用 Godaddy 提供的憑證,可以參考之前設定 Tomcat 時建立 Keystore 的步驟 [1],細節這裡就略過了。
設定 HTTPS
主要要啟用 HTTPS,需要設定的是 /{NEXUS_HOME}/conf/jetty-https.xml 這個檔案,對應的參考文件是 [2]。
在 jetty-https.xml 中,設定以下關於憑證的資訊:
<Set name="keyStore">./conf/ssl/keystore.jks</Set> <Set name="trustStore">./conf/ssl/keystore.jks</Set> <Set name="keyStorePassword">keyStorePassword</Set> <Set name="keyManagerPassword">keyManagerPassword</Set> <Set name="trustStorePassword">trustStorePassword</Set>
這裡的設定是假設我們把 Keystore 檔案改名成 keystore.jks,並且按照 Nexus 2 的預設值一樣放在 /{NEXUS_HOME}/conf/ssl 資料夾裡面。然後同時指定各種憑證所需的密碼即可。
設定 HTTPS 使用的連接埠
要設定連接埠,要調整 /{NEXUS_HOME}/conf/nexus.properties,在裡面追加以下這行,假設我們想把 HTTPS 開在 8443 port:
application-port-ssl=8443
啟用 HTTPS
在官方文件 [2] 中,啟用的動作很簡要地被帶過了,實際上需要做的事情是去修改 /{NEXUS_HOME}/bin/jsw/conf/wrapper.conf,並且在裡面加上新的 Property。例如以我的 Nexus 2.14.09-01 來說,預設的 wrapper.conf 裡面只有以下兩行:
wrapper.app.parameter.1=./conf/jetty.xml wrapper.app.parameter.2=./conf/jetty-requestlog.xml
這是表示啟用了 HTTP 以及 requestlog,而我們要在底下再追加一行設定以啟用 HTTPS:
wrapper.app.parameter.1=./conf/jetty.xml wrapper.app.parameter.2=./conf/jetty-requestlog.xml wrapper.app.parameter.3=./conf/jetty-https.xml
這裡我們先保留 jetty.xml 在上面,追加了 jetty-https.xml,這表示是同時啟用 HTTP 和 HTTPS。設定完以後就完成了,接著重新啟動 Nexus 2 就可以透過 HTTPS 連線了。
啟用 HTTP 自動轉向
在一般網站上常有自動把 HTTP 轉向到 HTTPS 的設定,在 Nexus 2(正確來說是 Jetty)上也可以做這個設定,而且相當地簡單。Nexus 2 已經內建寫好自動轉向的 XML 設定,我們唯一需要做的只有啟用它而已。
wrapper.app.parameter.1=./conf/jetty.xml wrapper.app.parameter.2=./conf/jetty-requestlog.xml wrapper.app.parameter.3=./conf/jetty-https.xml wrapper.app.parameter.4=./conf/jetty-http-redirect-to-https.xml
不過需要稍微注意一點的是,自動轉向是伺服器回覆 HTTP 301 讓瀏覽器自己動作,因此對於不會進行動作的客戶端就沒有效果。例如即使是啟用了自動轉向,在像是 eclipse 的 Maven 專案上,repository 屬性的位置如果還是寫 HTTP,會導致 Maven 回覆無法下載,因為 eclipse 的 Maven 套件不會依據 HTTP 301 做轉向。
沒有留言:
張貼留言