SSL 代表“安全套接字層”,它是一種標準安全技術,用於在 Web 服務器和 Web 瀏覽器之間創建加密鏈接。 此鏈接可確保服務器和瀏覽器之間傳遞的所有信息保持私密和安全。 SSL 證書的主要目的是確保網站安全,並對客戶端和瀏覽器之間傳輸的數據進行加密,以防止信用卡詳細信息、帳號和密碼等敏感信息被盜。
自簽名證書是由創建它的人而不是受信任的證書頒發機構 (CA) 簽名的證書。 大多數客戶和組織都傾向於使用自簽名 SSL 證書,而不是由受信任的證書頒發機構頒發和驗證的證書,主要是因為成本差異。 但它仍然提供相同級別的加密。
在本文中,我將解釋如何在帶有 Nginx Web 服務器的 Ubuntu 18.04 服務器上創建自簽名 SSL 證書。
先決條件
配置良好的服務器,具有 root 權限和 OpenSSL 庫。 生成您自己的證書需要 OpenSSL 庫。 在您的 ubuntu 服務器中運行以下命令以查看您是否已經安裝了 OpenSSL。
# which openssl
/usr/bin/openssl
如果 which 命令沒有返回二進製文件,那麼我們需要使用以下命令安裝它:
#apt install openssl
創建自簽名證書
SSL 主要由兩部分組成,一是私鑰,另一部分是公共證書。 SSL 密鑰在服務器上保密,僅限於 root 用戶。 它實際上用於加密發送給客戶端的內容。 公共 SSL 證書與請求內容的任何人共享。 它可用於解密由關聯的私有 SSL 密鑰簽名的內容。 在這裡,我使用這個命令來生成一個自簽名證書,即 example.com.crt 和一個私鑰 example.com.key(這裡我使用 example.com.pem 作為文件名)使用 OpenSSL 工具。
#在enssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.pem
請參閱以下每個選項的詳細信息:
- req:此子命令用於創建新的 X.509 證書。 “X.509”是 SSL 和 TLS 為其密鑰和證書管理所遵循的公鑰基礎設施標準。
- -x509:這通過告訴實用程序我們要製作自簽名證書來進一步修改前一個子命令。
- -nodes:這用於跳過密碼選項以保護我們的證書。
- -days 365:此選項以天為單位設置證書的有效性。 我們在這裡設置了一年。
- -newkey rsa:2048:這指定我們要生成一個 2048 位長的新 RSA 密鑰以及證書。
- -keyout:這個選項告訴 OpenSSL 在哪裡放置生成的私鑰文件。
- -out:這個選項告訴 OpenSSL 在哪裡放置生成的證書。
在此命令執行期間,它會提示我們提供用於生成證書籤名請求 (CSR) 的域/客戶端詳細信息。 您可以根據需要提供這些詳細信息。
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:Victoria
Locality Name (eg, city) []:Melbourne
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide LLC
Organizational Unit Name (eg, section) []:Web
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]
現在我們有了新生成的自簽名證書,私鑰是這些位置: /etc/ssl/certs/example.com.pem
和 /etc/ssl/private/example.com.key
. 接下來,我們應該創建一個強大的 Diffie-Hellman 組,用於與客戶協商完全向前保密。 您可以運行此命令來創建一個。
#openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
這可能需要一些時間才能完成,但完成後我們將擁有強大的 DH 團隊 /etc/ssl/certs/dhparam.pem
我們可以在我們的配置中使用。
配置 Nginx 以使用自簽名證書
在開始之前,我們需要確保在我們的 Ubuntu 18.04 服務器上安裝了 Nginx Web 服務器。 如果未安裝,則可以使用以下簡單命令進行安裝:
#apt install nginx
我已經在我的服務器上安裝並啟用了這項服務。
# nginx -v
nginx version: nginx/1.14.0 (Ubuntu)
#systemctl enable nginx
#systemctl start nginx
#systemctl status nginx
下一個。 我們可以將 Nginx 配置為使用 SSL。 我將分三步解釋:
- 使用生成的 SSL 證書詳細信息創建片段配置。
- 創建片段配置以維護強大且安全的 SSL 設置以克服可能的 SSL 漏洞。
- 使用上述代碼段配置更新域虛擬主機以啟用 SSL
步驟 1:使用 SSL 證書詳細信息創建片段配置
讓我們創建一個新的片段配置文件,即“self-signed.conf”,用於將生成的自簽名證書詳細信息指向 Nginx 片段文件夾中: /etc/nginx/snippets/
如下:
# cat /etc/nginx/snippets/self-signed.conf
# Self signed certificates generated by the ssl-cert package
# Don't use them in a production server!
ssl_certificate /etc/ssl/certs/example.com.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;
這裡我們需要指定我們生成的證書路徑:/etc/ssl/certs/example.com.pem
和關鍵路徑: /etc/ssl/private/example.com.key
對於上述指令。
第 2 步:創建片段配置以維護強大且安全的 SSL 設置以克服可能的 SSL 漏洞
其次,我們需要維護功能齊全且強大的 SSL 服務器配置,以保護我們的服務器免受所有可能的 SSL 漏洞的影響。 我已經使用強大的 SSL 密碼套件配置了我的 Nginx,並啟用了一些高級功能以確保服務器安全。 所有這些參數都包含在文件中: /etc/nginx/snippets/ssl-params.conf
cat /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling off;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
您可以在以下位置獲得這些 Nginx 密碼建議 密碼列表. 這些參數將在未來的 Nginx 配置中用於 SSL。 如您所見,我們已經設置了 ssl_dhparam
設置指向我們之前在這裡生成的 Diffie-Hellman 文件。 由於我們使用的是自簽名證書,因此 SSL stapling
不會被使用。 因此,我已經把它 off
否則 Nginx 只會輸出這樣的警告 nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate
. 進行這些更改後,您可以保存配置並退出。
第 3 步:使用上述代碼段配置更新域虛擬主機以啟用 SSL
我們已準備好所需的片段配置,現在我們可以將它們包含在域虛擬主機中並啟用 SSL。 在本文中,我使用位於以下位置的默認 Nginx 配置文件 /etc/nginx/sites-available/default
. 我已修改此文件以啟用 SSL 並獲取生成的自簽名證書。 請參閱此配置中的以下修改部分:
cat /etc/nginx/sites-available/default
#
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
現在我們可以保存這些配置並重新啟動 Nginx 服務以使這些更改生效。
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#systemctl restart nginx
測試
這是我們的最後一步,我們可以打開瀏覽器並嘗試通過 URL 訪問我們的服務器 IP >> https://Server_IP or Hostname
. 由於我們使用的是自簽名證書,因此它將顯示安全警告,您可以忽略該警告並單擊以確認安全性以繼續進行,如快照所示。
另請閱讀:
- Mkcert – 在 Linux 上為本地開發創建 SSL 證書
- 如何在 Ubuntu 18.04 上安裝 Let’s Encrypt SSL 證書
- 如何使用 Docker 將 NGINX 設置為反向代理
就這樣! 我們已經成功地為 Nginx 配置了自簽名證書,使用強大的加密方法來確保客戶端連接的安全。 我希望這篇文章對你有用! 請就此發表您的寶貴意見和建議。