近日敝單位踩到 HSTS 的地雷,於是就著手解決問題…
先說地雷的引爆點: 新上線 example.com 這網站給了 “strict-transport-security: max-age=31536000; includeSubDomains” 這組 HTTP header,使得原本透過 Apache Tomcat 提供服務的 http://system.example.com.tw:8080/ 網頁瀏覽異常;因瀏覽器參照 HSTS 後,只把 “http://” 改為 “https://” ,瀏覽器不知道應該同步修改連接埠號(port 8080)。
因為這幾台伺服器的網頁服務僅使用 Apache Tomcat,沒有 Apache HTTPD、nginx 等其他軟體佔用 port 80 與 443,用 iptables 作 port redirection 就可以擺平,調整的方式會比較簡單。
需要作的事的大概就這些:
- 取得 SSL certificates,並確認 renew 的時候可重新啟動 Apache Tomcat
- 安裝 Tomcat Native
- 調整 Tomcat 的 server.xml
- 調整 iptables rules
Apache Tomcat 7 的 server.xml 用這段(某些參數視狀況調整):
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="200" SSLEnabled="true"
SSLCertificateFile="/etc/letsencrypt/live/example.com/cert.pem"
SSLCertificateKeyFile="/etc/letsencrypt/live/example.com/privkey.pem"
SSLCACertificateFile="/etc/letsencrypt/live/example.com/chain.pem" />
Apache Tomcat 9 的 server.xml 用這段(某些參數視狀況調整),支援 HTTP/2:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="200" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="/etc/letsencrypt/live/example.com/privkey.pem"
certificateFile="/etc/letsencrypt/live/example.com/cert.pem"
certificateChainFile="/etc/letsencrypt/live/example.com/chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
iptables rules 增加以下這兩條:
/sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
/sbin/iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
8 月 22 2024
更換 SSL 憑證與 DNSSEC 演算法
近期處理一些網站 SSL 憑證與 DNSSEC 相關的事,寫這篇留點紀錄供日後參考…
原先的 SSL 憑證幾乎都是透過 certbot 取得 (參考:用 certbot 取用 Let’s Encrypt 的 certificates);在 ECDSA certificates by default and other upcoming changes in Certbot 2.0 能看到其預設的演算法已從 RSA 變更成 ECDSA,但… 早期取得憑證時產生的設定檔仍須自己做更改。
設定檔都在 /etc/letsencrypt/renewal 目錄裡面,調整後的參數如下:
在準備更換 SSL 憑證時,找了些資料,恰巧看到 RFC 8624 – Algorithm Implementation Requirements and Usage Guidance for DNSSEC,就順便處理 DNSSEC 的事。
依據 3.1 節的說明,ED25519 是最佳選擇,其次就是 ECDSAP384SHA384 或 ED448;選擇演算法前,必須先看看域名註冊商提供的設定項。
以 ED25519 為例,我的操作流程如下:
過一段時間後,可以透過一些線上工具作驗證,像是 DNSViz | A DNS visualization tool。
By Joe Horn • Network 0 • Tags: DNS, DNSSEC, HTTPS, security, SSL