Linux 配置 SSL 證書


完整的 SSL 證書分為四個部分:

  • CA 根證書 (root CA)
  • 中級證書 (Intermediate Certificate)
  • 域名證書
  • 證書密鑰 (僅由您持有)

以 COMODO PositiveSSL 證書為例,您將收到四份文件:

  • 根證書 – AddTrustExternalCARoot.crt
  • 中級證書 – COMODORSAAddTrustCA.crt
  • 中級證書 – COMODORSADomainValidationSecureServerCA.crt
  • 您的域名證書 – example_com.crt

您要依照 域名證書 -> 中間證書 -> 根證書 的順序串聯為證書鏈,才能被絕大多數瀏覽器信任。使用 cat 命令串聯證書:

cat example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > example_com.bundle.crt

得到 example_com.bundle.crt 后,和密鑰文件 example_com.key 一同上傳至服務器並保存在安全的位置,例如/etc/ssl/private 目錄下(沒有此目錄請創建)。

修改 NGINX 站點配置

下面是一份針對較新版本的 NGINX 的 SSL 部分配置,請將其添加到站點配置文件中 server 的部分,並根據注釋和您的需求修改。

listen 443 ssl;    # 偵聽端口
# listen [::]:443 ssl ipv6only=on;    # 如果您希望同時偵聽 IPv6,請取消此行注釋

server_name example.com;    # 請改為您的域名

ssl_certificate /etc/ssl/private/example_com.bundle.crt;    # 證書鏈
ssl_certificate_key /etc/ssl/private/example_com.key;    # 密鑰
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;    # 支持的協議,Windows XP 不支持
ssl_prefer_server_ciphers on;    # 啟用 Forward Secrecy
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
keepalive_timeout 70;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

如果您希望至少支持一些老式瀏覽器,並且在能夠使用 ECDHE 時盡可能使用此算法,您可以使用下面的配置:

ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4";

或者使用最簡單的方案:

ssl_ciphers "EECDH+aRSA+AES";

生成 DHE 參數

為了避免使用 OpenSSL 默認的 1024bit DHE 參數,我們需要生成一份更強的參數文件:

cd /etc/ssl/certs
openssl dhparam -out dhparam.pem 4096

建議您使用性能強勁的平台生成此文件,例如最新版的至強物理機。如果您只有一台小型 VPS,請使用 openssl dhparam -out dhparam.pem 2048 命令生成 2048bit 的參數文件。

完成后,在 SSL 配置下添加一行:

ssl_dhparam /etc/ssl/certs/dhparam.pem;

啟用 HSTS

HTTP Strict Transport Security (HSTS) 可以使瀏覽器第一次訪問您的站點后即記住僅通過 HTTPS 與您的站點通信,可以大大提升安全性。

在 SSL 配置下添加:

add_header Strict-Transport-Security max-age=63072000;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

強制定向到 HTTPS

您需要一個單獨 server 配置用於偵聽 HTTP 80 端口,然后所有發送到這里的請求定向到 HTTPS 協議。

server {
    listen 80;
    # listen [::]:80 ipv6only=on;    # 如果您需要同時偵聽 IPv6,請取消此行注釋
    server_name example.com;    # 您的域名

    location / {
        return 301 https://example.com$request_uri;    # 要重定向的地址,請將 example.com 改為您的域名
    }
}

或者使用 rewrite:

rewrite ^ https://example.com$request_uri? permanent;    # 請將 example.com 改為您的域名

一份完整樣例

這里是基於 NGINX 1.4.6 的一份完整配置樣例。請根據您的需求修改使用。

server {
        listen 80;
        # listen [::]:80 ipv6only=on;
        server_name www.example.com;
        rewrite ^ https://www.example.com$request_uri? permanent;
}

server {
        listen 443 ssl;
        # listen [::]:443 ssl ipv6only=on;

        server_name www.example.com;

        ssl on;
        ssl_certificate /etc/ssl/private/www_example_com.crt;
        ssl_certificate_key /etc/ssl/private/www_example_com.key;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
        keepalive_timeout 70;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;

        add_header Strict-Transport-Security max-age=63072000;
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;

        root /var/www/example.com;
        index index.html;

        location / {
                try_files $uri $uri/ /index.html;
        }
}

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM