Nginx上佈署SSL/TLS,实现https连接

1 證書準備

佈署SSL/TLS必須要有一個私鈅,由私鈅生成證書請求文件,找可信的第三方簽署生效。當然也可以自己生成CA證書來簽署,但是這種證書不被信任,僅做測試或加密用途時可以採用這種方法(參考:Linux 系统 OpenSSL 证书生成)。找商業性的CA簽署一般要收費,或者也可在Startssl.com申请1年期的免费证书(參考:Apache + WordPress + SSL 完全指南)。本文以Startssl生成的證書為例,同時,假定證書文件全部放在/etc/nginx/conf/目录下。

2 服務器配置

2.1 解密私鈅

Startssl默認生成的私鈅是經過DES加密的,在linux下可用下面的命令解密,解密過程中輸入私鈅產生時輸入的密碼。

openssl rsa -in ssl.key -out /etc/nginx/conf/ssl.key

解密也可以通過Startssl的Toolbox實現。

更改ssl.key的文件權限來保護私鈅:

chmod 600 /etc/nginx/conf/ssl.key

2.2 下載CA根證書和中級證書

wget http://www.startssl.com/certs/ca.pem
wget http://www.startssl.com/certs/sub.class1.server.ca.pem

2.3 將CA根證書和中級證書合併成一個文件

cat ssl.crt sub.class1.server.ca.pem ca.pem > /etc/nginx/conf/ssl-unified.crt

2.4 網站配置

在網站配置文件的server區塊加入以下代碼:

listen 443;
ssl on;
ssl_certificate /etc/nginx/conf/ssl-unified.crt;
ssl_certificate_key /etc/nginx/conf/ssl.key;

重啓nginx服務

sudo /etc/init.d/nginx restart

3 強制nginx使用https連接

通過以上步驟已經可以實現網站的https加密連接了,如果需要將所有的http請求強制轉換成https請求的話需要在網站的配置文件中增加一個server區塊,監聽80端口的請求並改成https連接,代碼如下:

server {
listen 80;
server_name example.com;
rewrite ^(.*) https://$server_name$1 permanent;
}

同時取消原來server區塊中對80端口的監聽,僅保留443端口,最後重啓nginx服務即可。

需要說明的是,強制https連接之後,除Google以外,其他的搜索引擎將無法再索引該網站。

本文主要翻譯自以下網頁:

[1] Startssl.com. How to Install >> NGINX Server. https://www.startssl.com/?app=42

发表评论

电子邮件地址不会被公开。 必填项已用*标注