Nginx SSL 憑證加分的設定調整

Nginx 的 HTTPS (SSL) 設定在此篇文章已經有寫:Nginx 的 SSL 設定檔範例

但是遇到某些瀏覽器、某些 Android 手機還是出現憑證不安全的訊息,把HTTPS網址資訊送去檢驗,得到的憑證分數是B,所以來把這個憑證分數調成A。

註:調整成A後,目前確實暫時沒有出現不安全的訊息了。

Nginx SSL 憑證加分的設定調整

憑證的檢驗網站:SSL Server Test (Powered by Qualys SSL Labs)

此篇文章並沒有把所有問題都解決掉,而且也不是說分數B就會有問題,例如下述公司分數是B,但是也都跑得好好的。

Nginx SSL 憑證設定加強部份

設定排除 SSLv2、SSLv3

這個部份之前這篇寫過,在此就不詳述,請參考此篇即可:Apache2 與 Nginx 移除 SSLv2、SSLv3 支援

Chain issues

憑證如果有 Chain issues,在前面 bundle 的步驟,可能漏掉,所以記得把抓下來的憑證整合成一張(Apache 不用整合,而是有 SSLCertificateChainFile 設定。Nginx 只有 CA 和 Key 兩個參數可以設定,所以要記得整合)

  1. 憑證合併:
    • $ cat www.example.com.crt bundle.crt > www.example.com.chained.crt
    • 範例:$ sudo cat ssl.feebee.com.tw.crt ssl.feebee.com.tw.ca-bundle > ssl.feebee.com.tw.chained.crt
    • 註:crt 和 bundle 會從 SSL 廠商取得(抓到)
  2. Chain 設定:
    • 設定參考:Configuring HTTPS servers
      • sslcertificate www.example.com.chained.crt;
      • sslcertificate_key www.example.com.key;

Weak Diffie-Hellman and the Logjam Attack

說明可見:

解法:(取其一即可)

  • $ sudo openssl dhparam -out dhparams.pem 2048
  • $ sudo openssl dhparam -out dhparams.pem 4096
  • 產生出 dhparams.pem 跟憑證放在一起即可。
  • Nginx 寫憑證的設定檔,加入此行即可:ssl_dhparam /etc/nginx/ssl.crt/dhparams.pem; (此路徑請自行更換成檔案放的位置)

HSTS (HTTP Strict Transport Security)

說明可見:(這步驟非必要,我只有上部份機器)

作法:

Nginx 在設定檔內加入下述:

add_header Strict-Transport-Security max-age=31536000;

Apache2 需要下述步驟:

  1. sudo a2enmod headers
  2. 編輯 VirtualHost 的設定檔,加入下述:
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
  3. 再來重新啟動 Web server 即可。

上述加完後,Nginx 的設定檔會長這樣子:

server {
    listen 443;
    server_name example.com.tw
    root /var/www/;
    index index.html index.htm;

    access_log  /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log crit;

    #add_header Strict-Transport-Security max-age=31536000;

    ssl on;
    ssl_certificate /etc/nginx/ssl.crt/ssl.example.com.chained.crt;
    ssl_certificate_key /etc/nginx/ssl.crt/ssl.example.com-nopass.key;

    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:5m;

    #ssl_protocols SSLv2 SSLv3;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
    ssl_prefer_server_ciphers on;

    ssl_dhparam /etc/nginx/ssl.crt/dhparams.pem;
}

參考網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈Nginx SSL 憑證加分的設定調整〉中有 2 則留言

  1. tsung 你好
    憑證合併
    A > B 會變成覆蓋。是不是這個地方應該改為 A >> B 才會把A的資料輸入到B的檔案裡面?

    1. 嗯嗯,這個是故意要蓋掉的,避免有人重複執行後,在裡面有多張憑證反而會有問題

      註:有時候重複執行是因為搞不定,一直在申請新的憑證

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料