如何保護 Ubuntu 16.04 上的 NGINX Web 伺服器
什麼是 Let』s Encrypt
Let』s Encrypt 是互聯網安全研究組織 (ISRG) 提供的免費證書認證機構。它提供了一種輕鬆自動的方式來獲取免費的 SSL/TLS 證書 - 這是在 Web 伺服器上啟用加密和 HTTPS 流量的必要步驟。獲取和安裝證書的大多數步驟可以通過使用名為 Certbot 的工具進行自動化。
特別地,該軟體可在可以使用 shell 的伺服器上使用:換句話說,它可以通過 SSH 連接使用。
在本教程中,我們將看到如何使用 certbot
獲取免費的 SSL 證書,並在 Ubuntu 16.04 伺服器上使用 Nginx。
安裝 Certbot
第一步是安裝 certbot
,該軟體客戶端可以幾乎自動化所有的過程。 Certbot 開發人員維護自己的 Ubuntu 倉庫,其中包含比 Ubuntu 倉庫中存在的軟體更新的軟體。
添加 Certbot 倉庫:
# add-apt-repository ppa:certbot/certbot
接下來,更新 APT 源列表:
# apt-get update
此時,可以使用以下 apt
命令安裝 certbot
:
# apt-get install certbot
Certbot 現已安裝並可使用。
獲得證書
有各種 Certbot 插件可用於獲取 SSL 證書。這些插件有助於獲取證書,而證書的安裝和 Web 伺服器配置都留給管理員。
我們使用一個名為 Webroot 的插件來獲取 SSL 證書。
在有能力修改正在提供的內容的情況下,建議使用此插件。在證書頒發過程中不需要停止 Web 伺服器。
配置 NGINX
Webroot 會在 Web 根目錄下的 .well-known
目錄中為每個域創建一個臨時文件。在我們的例子中,Web 根目錄是 /var/www/html
。確保該目錄在 Let』s Encrypt 驗證時可訪問。為此,請編輯 NGINX 配置。使用文本編輯器打開 /etc/nginx/sites-available/default
:
# $EDITOR /etc/nginx/sites-available/default
在該文件中,在 server
塊內,輸入以下內容:
location ~ /.well-known {
allow all;
}
保存,退出並檢查 NGINX 配置:
# nginx -t
沒有錯誤的話應該會顯示如下:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重啟 NGINX:
# systemctl restart nginx
使用 Certbot 獲取證書
下一步是使用 Certbot 的 Webroot 插件獲取新證書。在本教程中,我們將保護示例域 www.example.com。需要指定應由證書保護的每個域。執行以下命令:
# certbot certonly --webroot --webroot-path=/var/www/html -d www.example.com
在此過程中,Cerbot 將詢問有效的電子郵件地址,用於進行通知。還會要求與 EFF 分享,但這不是必需的。在同意服務條款之後,它將獲得一個新的證書。
最後,目錄 /etc/letsencrypt/archive
將包含以下文件:
chain.pem
:Let』s Encrypt 加密鏈證書。cert.pem
:域名證書。fullchain.pem
:cert.pem
和chain.pem
的組合。privkey.pem
:證書的私鑰。
Certbot 還將創建符號鏈接到 /etc/letsencrypt/live/domain_name/
中的最新證書文件。這是我們將在伺服器配置中使用的路徑。
在 NGINX 上配置 SSL/TLS
下一步是伺服器配置。在 /etc/nginx/snippets/
中創建一個新的代碼段。 snippet 是指一段配置,可以包含在虛擬主機配置文件中。如下創建一個新的文件:
# $EDITOR /etc/nginx/snippets/secure-example.conf
該文件的內容將指定證書和密鑰位置。粘貼以下內容:
ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;
在我們的例子中,domain_name
是 example.com
。
編輯 NGINX 配置
編輯默認虛擬主機文件:
# $EDITOR /etc/nginx/sites-available/default
如下:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.example.com
return 301 https://$server_name$request_uri;
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
include snippets/secure-example.conf
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
# ...
}
這將啟用 NGINX 加密功能。
保存、退出並檢查 NGINX 配置文件:
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重啟 NGINX:
# systemctl restart nginx
總結
按照上述步驟,此時我們已經擁有了一個安全的基於 NGINX 的 Web 伺服器,它由 Certbot 和 Let』s Encrypt 提供加密。這只是一個基本配置,當然你可以使用許多 NGINX 配置參數來個性化所有東西,但這取決於特定的 Web 伺服器要求。
via: https://www.unixmen.com/encryption-secure-nginx-web-server-ubuntu-16-04/
作者:Giuseppe Molica 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive