自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在 Ubuntu 20.04 中為 Nginx 創(chuàng)建自簽名 SSL 證書(shū)

系統(tǒng) Linux
在本指南中,我們將向您展示如何在 Ubuntu 20.04 服務(wù)器上設(shè)置用于 Nginx Web 服務(wù)器的自簽名 SSL 證書(shū)。

[[440853]]

介紹

TLS或傳輸層安全性及其前身SSL代表安全套接字層,是用于保護(hù)和加密計(jì)算機(jī)網(wǎng)絡(luò)流量的 Web 協(xié)議。

使用 TLS/SSL,服務(wù)器可以安全地在服務(wù)器和客戶端之間發(fā)送流量,而不會(huì)出現(xiàn)消息被外部攔截的可能性。證書(shū)系統(tǒng)還幫助用戶驗(yàn)證他們正在連接的站點(diǎn)的身份。

在本指南中,我們將向您展示如何在 Ubuntu 20.04 服務(wù)器上設(shè)置用于 Nginx Web 服務(wù)器的自簽名 SSL 證書(shū)。(見(jiàn) https://www.linuxmi.com/ubuntu-20-04-nginx-ssl-certificate.html)

注意:自簽名證書(shū)將加密您的服務(wù)器和任何客戶端之間的通信。但是,由于它不是由 Web 瀏覽器中包含的任何受信任的證書(shū)頒發(fā)機(jī)構(gòu)簽署的,因此用戶無(wú)法使用該證書(shū)來(lái)自動(dòng)驗(yàn)證您的服務(wù)器的身份。

如果您沒(méi)有與服務(wù)器關(guān)聯(lián)的域名,并且加密的 Web 界面不是面向用戶的,則自簽名證書(shū)可能是合適的。如果您確實(shí)有域名,則在許多情況下最好使用 CA 簽署的證書(shū)。您可以通過(guò)Let's Encrypt 項(xiàng)目了解如何設(shè)置免費(fèi)的可信證書(shū)(見(jiàn) https://www.linuxmi.com/ubuntu-20-04-lets-encrypt-nginx.html)。

先決條件

在開(kāi)始之前,您應(yīng)該有一個(gè)配置了sudo權(quán)限并啟用防火墻的非 root 用戶。

您還需要安裝 Nginx Web 服務(wù)器。按照我們?cè)?Ubuntu 20.04上安裝 Nginx的指南進(jìn)行操作(見(jiàn)https://www.linuxmi.com/linux-nginx-web-server.html)。確保完成本教程的第 5 步并設(shè)置服務(wù)器塊,因?yàn)檫@是測(cè)試 Nginx 是否能夠使用您的自簽名證書(shū)加密連接所必需的。

步驟 1 – 創(chuàng)建 SSL 證書(shū)

TLS/SSL 通過(guò)公共證書(shū)和私鑰的組合發(fā)揮作用。SSL 密鑰在服務(wù)器上保密,并對(duì)發(fā)送給客戶端的內(nèi)容進(jìn)行加密。SSL 證書(shū)與請(qǐng)求內(nèi)容的任何人公開(kāi)共享。它可用于解密由相關(guān) SSL 密鑰簽名的內(nèi)容。

您可以在單個(gè)命令中使用 OpenSSL 創(chuàng)建自簽名密鑰和證書(shū)對(duì):

  •  sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

以下是此命令每個(gè)部分的作用的細(xì)分:

  •  sudo: 該sudo命令允許sudo組成員臨時(shí)將他們的權(quán)限提升到另一個(gè)用戶(默認(rèn)為超級(jí)用戶或root用戶)的權(quán)限。在這種情況下這是必要的,因?yàn)槲覀冋?etc/目錄下創(chuàng)建證書(shū)和密鑰對(duì),只能由root用戶或其他特權(quán)帳戶訪問(wèn)。
  •  openssl:這是用于創(chuàng)建和管理 OpenSSL 證書(shū)、密鑰和其他文件的基本命令行工具。
  •  req:此子命令指定我們要使用 X.509 證書(shū)簽名請(qǐng)求 (CSR) 管理。“X.509”是 SSL 和 TLS 對(duì)其密鑰和證書(shū)管理所遵循的公鑰基礎(chǔ)設(shè)施標(biāo)準(zhǔn)。我們想創(chuàng)建一個(gè)新的 X.509 證書(shū),所以我們使用這個(gè)子命令。
  •  -x509:這通過(guò)告訴實(shí)用程序我們要制作自簽名證書(shū)而不是像通常發(fā)生的那樣生成證書(shū)簽名請(qǐng)求來(lái)進(jìn)一步修改前一個(gè)子命令。
  •  -nodes:這告訴 OpenSSL 跳過(guò)使用密碼保護(hù)我們的證書(shū)的選項(xiàng)。當(dāng)服務(wù)器啟動(dòng)時(shí),我們需要 Nginx 能夠在沒(méi)有用戶干預(yù)的情況下讀取文件。密碼可以防止這種情況發(fā)生,因?yàn)槲覀儽仨氃诿看沃匦聠?dòng)后輸入它。
  •  -days 365:此選項(xiàng)設(shè)置證書(shū)被視為有效的時(shí)間長(zhǎng)度。我們?cè)谶@里設(shè)置了一年。
  •  -newkey rsa:2048:這指定我們要同時(shí)生成新證書(shū)和新密鑰。我們沒(méi)有在上一步中創(chuàng)建簽署證書(shū)所需的密鑰,因此我們需要將其與證書(shū)一起創(chuàng)建。該rsa:2048部分告訴它制作一個(gè) 2048 位長(zhǎng)的 RSA 密鑰。
  •  -keyout:這一行告訴 OpenSSL 在哪里放置我們正在創(chuàng)建的生成的私鑰文件。
  •  -out:這告訴 OpenSSL 在哪里放置我們正在創(chuàng)建的證書(shū)。

如前所述,這些選項(xiàng)將創(chuàng)建密鑰文件和證書(shū)。運(yùn)行此命令后,系統(tǒng)會(huì)詢問(wèn)您一些有關(guān)服務(wù)器的問(wèn)題,以便將信息正確嵌入到證書(shū)中。

適當(dāng)填寫(xiě)提示。最重要的一行是請(qǐng)求Common Name (e.g. server FQDN or YOUR name). 您需要輸入與您的服務(wù)器相關(guān)聯(lián)的域名,或者更有可能是您服務(wù)器的公共 IP 地址。

整個(gè)提示將如下所示: 

  1. Country Name (2 letter code) [AU]:US  
  2. State or Province Name (full name) [Some-State]:New York  
  3. Locality Name (eg, city) []:New York City  
  4. Organization Name (eg, company) [Internet Widgits Pty Ltd]:Bouncy Castles, Inc.  
  5. Organizational Unit Name (eg, section) []:Ministry of Water Slides  
  6. Common Name (e.g. server FQDN or YOUR name) []:server_IP_address  
  7. Email Address []:admin@your_domain.com 

您創(chuàng)建的兩個(gè)文件都將放置在該/etc/ssl目錄的相應(yīng)子目錄中。

在使用 OpenSSL 時(shí),您還應(yīng)該創(chuàng)建一個(gè)強(qiáng)大的 Diffie-Hellman (DH) 組,用于與客戶端完全正向保密(perfect forward secrecy)。

您可以通過(guò)鍵入以下內(nèi)容來(lái)執(zhí)行此操作:

  •  sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096

這將需要一段時(shí)間,但完成后,您將擁有一個(gè)強(qiáng)大的 DH 組,/etc/nginx/dhparam.pem該組將在配置期間使用。

步驟 2 – 配置 Nginx 以使用 SSL

現(xiàn)在您的/etc/ssl目錄下的密鑰和證書(shū)文件已經(jīng)創(chuàng)建,您需要修改 Nginx 配置以利用它們。

首先,您將創(chuàng)建一個(gè)配置片段,其中包含有關(guān) SSL 密鑰和證書(shū)文件位置的信息。然后,您將創(chuàng)建一個(gè)具有強(qiáng) SSL 設(shè)置的配置片段,將來(lái)可以與任何證書(shū)一起使用。最后,您將使用您創(chuàng)建的兩個(gè)配置片段調(diào)整您的 Nginx 服務(wù)器塊,以便可以適當(dāng)?shù)靥幚?SSL 請(qǐng)求。

這種配置 Nginx 的方法將允許您保持干凈的服務(wù)器塊并將常見(jiàn)的配置段放入可重用的模塊中。

創(chuàng)建指向 SSL 密鑰和證書(shū)的配置片段

首先,使用您喜歡的文本編輯器在/etc/nginx/snippets目錄中創(chuàng)建一個(gè)新的 Nginx 配置片段。以下示例使用nano.

要正確區(qū)分此文件的用途,請(qǐng)將其命名為self-signed.conf:

  •  sudo nano /etc/nginx/snippets/self-signed.conf

在此文件中,您需要將ssl_certificate指令設(shè)置為您的證書(shū)文件和ssl_certificate_key關(guān)聯(lián)的密鑰。這將如下所示:

/etc/nginx/snippets/self-signed.conf 

  1. ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;  
  2. ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; 

添加這些行后,保存文件并退出編輯器。如果您曾經(jīng)nano編輯過(guò)該文件,則可以通過(guò)按CTRL + X、Y、來(lái)進(jìn)行編輯ENTER。

使用強(qiáng)加密設(shè)置創(chuàng)建配置片段

接下來(lái),您將創(chuàng)建另一個(gè)片段來(lái)定義一些 SSL 設(shè)置。這將為 Nginx 設(shè)置強(qiáng)大的 SSL 密碼套件,并啟用一些有助于確保服務(wù)器安全的高級(jí)功能。

您設(shè)置的參數(shù)可以在以后的 Nginx 配置中重復(fù)使用,因此您可以給文件一個(gè)通用名稱:

  •  sudo nano /etc/nginx/snippets/ssl-params.conf

為了安全地設(shè)置 Nginx SSL,我們將調(diào)整來(lái)自Cipherlist.eu的建議。Cipherlist.eu 是一種有用且易于理解的資源,可用于了解用于流行軟件的加密設(shè)置。

注意:來(lái)自 Cipherlist.eu 的這些建議設(shè)置提供了強(qiáng)大的安全性。有時(shí),這是以更高的客戶端兼容性為代價(jià)的。如果您需要支持舊客戶端,則可以通過(guò)單擊頁(yè)面上標(biāo)有“Yes, give me a ciphersuite that works with legacy / old software.(是的,給我一個(gè)適用于舊軟件/舊軟件的密碼套件)”的鏈接來(lái)訪問(wèn)該列表。如果需要,您可以用下一個(gè)示例代碼塊的內(nèi)容替換該列表。

選擇使用哪種配置在很大程度上取決于您需要支持的內(nèi)容。他們都將提供極大的安全性。

出于您的目的,請(qǐng)完整復(fù)制提供的設(shè)置,但首先,您需要進(jìn)行一些小的修改。

首先,為上游請(qǐng)求添加首選的 DNS 解析器。我們將在本指南中使用 Google 的 (8.8.8.8和8.8.4.4)。

其次,注釋掉設(shè)置嚴(yán)格傳輸安全標(biāo)頭的行。在取消對(duì)這一行的注釋之前,您應(yīng)該花點(diǎn)時(shí)間閱讀HTTP 嚴(yán)格傳輸安全性或 HSTS,特別是關(guān)于“預(yù)加載”功能的內(nèi)容。預(yù)加載 HSTS 可提供更高的安全性,但如果意外啟用或錯(cuò)誤啟用,也會(huì)產(chǎn)生深遠(yuǎn)的負(fù)面影響。

將以下內(nèi)容添加到您的ssl-params.conf代碼段文件中:

/etc/nginx/snippets/ssl-params.conf 

  1. ssl_protocols TLSv1.3;  
  2. ssl_prefer_server_ciphers on;  
  3. ssl_dhparam /etc/nginx/dhparam.pem;  
  4. ssl_ciphers EECDH+AESGCM:EDH+AESGCM;  
  5. ssl_ecdh_curve secp384r1;  
  6. ssl_session_timeout  10m;  
  7. ssl_session_cache shared:SSL:10m;  
  8. ssl_session_tickets off;  
  9. ssl_stapling on;  
  10. ssl_stapling_verify on;  
  11. resolver 8.8.8.8 8.8.4.4 valid=300s; 
  12. resolver_timeout 5s;  
  13. # Disable strict transport security for now. You can uncomment the following  
  14. # line if you understand the implications.  
  15. #add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";  
  16. add_header X-Frame-Options DENY;  
  17. add_header X-Content-Type-Options nosniff;  
  18. add_header X-XSS-Protection "1; mode=block"; 

因?yàn)槟褂玫氖亲院灻C書(shū),所以不會(huì)使用 SSL 裝訂。Nginx 將輸出警告并禁用我們的自簽名證書(shū)的裝訂,但隨后將繼續(xù)正常運(yùn)行。

完成后按“CTRL + X然后”Y和“保存”并關(guān)閉文件ENTER。

調(diào)整 Nginx 配置以使用 SSL

現(xiàn)在您有了代碼片段,您可以調(diào)整 Nginx 配置以啟用 SSL。

我們將在本指南中假設(shè)您在/etc/nginx/sites-available目錄中使用自定義服務(wù)器塊配置文件。本指南還遵循先決條件 Nginx 教程中的約定并用于此示例。根據(jù)需要替換您的配置文件名。/etc/nginx/sites-available/your_domain

在繼續(xù)之前,請(qǐng)備份您當(dāng)前的配置文件:

  •  sudo cp /etc/nginx/sites-available/your_domain /etc/nginx/sites-available/your_domain.bak

現(xiàn)在,打開(kāi)配置文件進(jìn)行調(diào)整:

  •  sudo nano /etc/nginx/sites-available/your_domain

在內(nèi)部,您的服務(wù)器塊可能類似于以下內(nèi)容:

/etc/nginx/sites-available/your_domain 

  1. server {  
  2.         listen 80;  
  3.         listen [::]:80;  
  4.         root /var/www/your_domain/html;  
  5.         index index.html index.htm index.nginx-debian.html;  
  6.         server_name your_domain www.your_domain;  
  7.         location / { 
  8.                 try_files $uri $uri/ =404;  
  9.         } 
  10.  

您的文件可能以不同的順序,并且代替root和index指令,你可能有一些location,proxy_pass或其它自定義的配置語(yǔ)句。這很好,因?yàn)槟恍枰耹isten指令并包含 SSL 片段。然后修改這個(gè)現(xiàn)有的服務(wù)器塊以在端口上提供 SSL 流量443,并創(chuàng)建一個(gè)新的服務(wù)器塊來(lái)響應(yīng)端口80并自動(dòng)將流量重定向到端口443。

注意:使用 302 重定向,直到您確認(rèn)一切正常。之后,您將其更改為永久 301 重定向。

在您現(xiàn)有的配置文件中,更新兩個(gè)listen語(yǔ)句以使用port 443and ssl,然后包含您在前面的步驟中創(chuàng)建的兩個(gè)片段文件:

/etc/nginx/sites-available/your_domain 

  1. server {  
  2.     listen 443 ssl;  
  3.     listen [::]:443 ssl;  
  4.     include snippets/self-signed.conf;  
  5.     include snippets/ssl-params.conf;  
  6. root /var/www/your_domain/html;  
  7.         index index.html index.htm index.nginx-debian.html;  
  8.   server_name your_domain.com www.your_domain.com;  
  9.   location / {  
  10.                 try_files $uri $uri/ =404;  
  11.         }  

接下來(lái),在第一個(gè)塊的右括號(hào) ( })之后將第二個(gè)服務(wù)器塊添加到配置文件中:

/etc/nginx/sites-available/your_domain.com 

  1. server {  
  2.     listen 80;  
  3.     listen [::]:80;  
  4.     server_name your_domain.com www.your_domain.com;  
  5.     return 302 https://$server_name$request_uri;  

這是一個(gè)簡(jiǎn)單的配置,它偵聽(tīng)端口80并執(zhí)行到 HTTPS 的重定向。保存并關(guān)閉文件,CTRL + X然后按然后Y,ENTER完成編輯后。

步驟 3 – 調(diào)整防火墻

如果您ufw按照先決條件指南的建議啟用了防火墻,則需要調(diào)整設(shè)置以允許 SSL 流量。幸運(yùn)的是,Nginxufw在安裝時(shí)注冊(cè)了一些配置文件。

您可以通過(guò)鍵入以下內(nèi)容來(lái)查看可用的配置文件:

  •  sudo ufw app list

將出現(xiàn)如下列表:

Available applications:

  Nginx Full

  Nginx HTTP

  Nginx HTTPS

  OpenSSH

您可以通過(guò)鍵入sudo ufw status以下內(nèi)容來(lái)檢查當(dāng)前設(shè)置:

  •  sudo ufw status

它可能會(huì)生成以下響應(yīng),這意味著 Web 服務(wù)器只允許 HTTP 流量: 

  1. Status: active  
  2. To                         Action      From  
  3. --                         ------      ----  
  4. OpenSSH                    ALLOW       Anywhere  
  5. Nginx HTTP                 ALLOW       Anywhere  
  6. OpenSSH (v6)               ALLOW       Anywhere (v6)  
  7. Nginx HTTP (v6)            ALLOW       Anywhere (v6) 

要允許 HTTPS 流量,您可以更新“Nginx Full”配置文件的權(quán)限,然后刪除多余的“Nginx HTTP”配置文件限額:

  •  sudo ufw allow 'Nginx Full'
  •  sudo ufw delete allow 'Nginx HTTP'

運(yùn)行后sudo ufw status,您應(yīng)該會(huì)收到以下輸出:

  •  sudo ufw status 
  1. Status: active  
  2. To                         Action      From  
  3. --                         ------      ----  
  4. OpenSSH                    ALLOW       Anywhere  
  5. Nginx Full                 ALLOW       Anywhere  
  6. OpenSSH (v6)               ALLOW       Anywhere (v6)  
  7. Nginx Full (v6)            ALLOW       Anywhere (v6) 

此輸出確認(rèn)對(duì)防火墻的調(diào)整已成功,您已準(zhǔn)備好在 Nginx 中啟用更改。

步驟 4 - 在 Nginx 中啟用更改

完成對(duì)防火墻的更改和調(diào)整后,您可以重新啟動(dòng) Nginx 以實(shí)現(xiàn)新更改。

首先,檢查文件中是否有語(yǔ)法錯(cuò)誤。您可以通過(guò)鍵入sudo nginx -t:

  •  sudo nginx -t

如果一切順利,您將得到如下結(jié)果: 

  1. nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate "/etc/ssl/certs/nginx-selfsigned.crt"  
  2. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok  
  3. nginx: configuration file /etc/nginx/nginx.conf test is successful 

注意開(kāi)頭的警告。如前所述,此特定設(shè)置會(huì)生成警告,因?yàn)槟淖院灻C書(shū)無(wú)法使用 SSL 裝訂。這是意料之中的,您的服務(wù)器仍然可以正確加密連接。

如果您的輸出與我們的示例匹配,則您的配置文件沒(méi)有語(yǔ)法錯(cuò)誤。如果是這種情況,那么您可以安全地重新啟動(dòng) Nginx 以實(shí)現(xiàn)更改:

  •  sudo systemctl restart nginx

現(xiàn)在系統(tǒng)已使用新更改重新啟動(dòng),您可以繼續(xù)進(jìn)行測(cè)試。

步驟 5 – 測(cè)試加密

現(xiàn)在,您已準(zhǔn)備好測(cè)試 SSL 服務(wù)器。

打開(kāi)您的網(wǎng)絡(luò)瀏覽器,https://然后在地址欄中輸入您服務(wù)器的域名或 IP:

https://server_domain_or_IP

根據(jù)您的瀏覽器,您可能會(huì)收到警告,因?yàn)槟鷦?chuàng)建的證書(shū)不是由您瀏覽器的受信任證書(shū)頒發(fā)機(jī)構(gòu)之一簽署的,

此警告在意料之中且正常。我們只對(duì)我們證書(shū)的加密方面感興趣,而不是對(duì)我們主機(jī)真實(shí)性的第三方驗(yàn)證。單擊“高級(jí)”,然后單擊提供的鏈接以繼續(xù)訪問(wèn)您的主機(jī):

此時(shí),您應(yīng)該被帶到您的站點(diǎn)。在我們的示例中,瀏覽器地址欄顯示一個(gè)帶有“x”的鎖,這意味著無(wú)法驗(yàn)證證書(shū)。它仍在加密您的連接。請(qǐng)注意,此圖標(biāo)可能會(huì)有所不同,具體取決于您的瀏覽器。

如果 Nginx 配置了兩個(gè)服務(wù)器塊,自動(dòng)將 HTTP 內(nèi)容重定向到 HTTPS,您還可以檢查重定向是否正常工作:

http://server_domain_or_IP

如果這導(dǎo)致相同的圖標(biāo),則表示您的重定向工作正常。

步驟 6  – 更改為永久重定向

如果您的重定向工作正常并且您確定只允許加密流量,您應(yīng)該修改 Nginx 配置以使重定向永久。

再次打開(kāi)您的服務(wù)器塊配置文件:

  •  sudo nano /etc/nginx/sites-available/your_domain

找到return 302并將其更改為return 301:

/etc/nginx/sites-available/your_domain.com 

  1. return 301 https://$server_name$request_uri; 

按CTRL + X然后Y和保存并關(guān)閉文件ENTER

檢查您的配置是否存在語(yǔ)法錯(cuò)誤:

  •  sudo nginx -t

準(zhǔn)備好后,重新啟動(dòng) Nginx 以使重定向永久生效:

  •  sudo systemctl restart nginx

重新啟動(dòng)后,將實(shí)施更改并且您的重定向現(xiàn)在是永久性的。

結(jié)論

您已將 Nginx 服務(wù)器配置為對(duì)客戶端連接使用強(qiáng)加密。這將使您能夠安全地處理請(qǐng)求并防止外部各方讀取您的流量?;蛘?,您可以選擇使用自簽名 SSL 證書(shū),該證書(shū)可以從 Let's Encrypt 獲得,Let's Encrypt 是一個(gè)證書(shū)頒發(fā)機(jī)構(gòu),可安裝免費(fèi)的 TLS/SSL 證書(shū)并在 Web 服務(wù)器上啟用加密的 HTTPS。從我們關(guān)于如何在 Ubuntu 20.04 上使用 Let's Encrypt 保護(hù) Nginx 的教程中了解更多信息(見(jiàn) https://www.linuxmi.com/ubuntu-20-04-lets-encrypt-nginx.html)。 

責(zé)任編輯:龐桂玉 來(lái)源: Linux公社
相關(guān)推薦

2020-06-12 07:59:54

SSL證書(shū)攻擊漏洞

2021-09-18 08:00:00

Python系統(tǒng)開(kāi)發(fā)

2021-12-15 11:46:46

HTTP2Nginx

2021-12-20 10:00:41

Let's EncryNginxLinux

2021-01-26 21:00:24

SSL證書(shū)網(wǎng)絡(luò)安全加密

2020-06-15 18:40:15

Ubuntu 20.0文件夾顏色Ubuntu

2022-05-29 17:37:39

LinuxUbuntuPHP

2022-06-14 09:33:15

LinuxGNU Emacs命令

2020-07-14 20:25:46

UbuntuLinux桌面應(yīng)用

2021-07-20 08:00:00

集群Elasticsear工具

2022-05-29 10:28:56

Ubuntusudo 密碼桌面環(huán)境

2020-08-14 07:00:00

RudderIT工具

2022-03-17 14:56:26

KubernetesMinikubeLinux

2022-01-28 08:15:36

UbuntuAPT軟件包

2020-10-17 13:04:35

UbuntuDeepin桌面環(huán)境

2022-09-01 08:37:50

Ubuntu發(fā)行版

2023-05-27 16:27:25

2009-08-26 22:21:12

2012-04-05 10:49:40

服務(wù)器SSL證書(shū)

2022-11-02 16:47:36

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)