如何讓HTTPS在本地主機localhost上工作? - Konstantin
這是有關如何使HTTPS在本地主機或任何本地域上執行的完整教程。
本教程是關於以下內容的:
- 如何設定本地域
- 如何建立自簽名SSL證書(或更準確地說是TLS證書)
- 如何配置Nginx以使用SSL證書
- 如何使用docker-compose在Docker容器中配置HTTPS的情況下執行Nginx
- 無需手動建立證書的解決方案
我正在使用Linux,所以本教程適用於Linux OS。如果使用Windows,則可以使用Git Bash模擬器或WSL(Linux的Windows子系統)執行相同的命令。儘管我沒有嘗試過,但某些命令可能無法正常工作。無論如何,設定路徑是相同的。只有命令可能有所不同。
最後,我們將Docker與docker-compose和Nginx結合使用,以測試HTTPS是否有效。
為什麼您可能需要本地域的HTTPS
有一些原因可能需要為本地域啟用HTTPS:
- 您可能需要用它來實現OAuth。
- 如果您在“主機”檔案中配置了本地域,並且想要在本地測試Service Worker
- 檢查您的網路應用重定向是否按預期工作
設定本地域
您可以使用“ localhost”作為域名,也可以建立本地自定義域以用於開發目的。如果您決定繼續使用“ localhost”,則只需跳過此部分並轉到下一個。
在整個教程中,我將使用“ myapp.local”域名作為示例。您可以使用任何您想要的域。
要建立本地域,您需要向“主機”檔案中新增新記錄。
使用“ nano”或“ vim”編輯器開啟“ / etc / hosts”檔案。在大多數情況下,您將需要新增“ sudo”以具有編輯和儲存檔案的許可權。我在下面的命令中使用“ nano”編輯器。
sudo nano /etc/hosts
新增具有所需域名的新行:
127.0.0.1 myapp.local
這會將“ myapp.local”域(或您選擇的任何域名)對映到IP 127.0.0.1。該IP已經被對映到同一檔案中的localhost。
儲存並關閉編輯器。現在,當您啟動Nginx伺服器時(即,如果您從本教程中使用Docker),則可以在瀏覽器的位址列中使用myapp.local域。
建立根自簽名SSL證書
您可以使用根證書來建立任意數量的本地證書。將根證書放置在專案資料夾或任何全域性資料夾中,以將其重新用於任何本地專案。
我在使用者的主目錄中建立了一個新資料夾“ local-root-ca”。
mkdir ~/local-root-ca cd ~/local-root-ca |
在該資料夾中執行“ genrsa”命令以建立私鑰RSA金鑰。
openssl genrsa -des3 -out rootCA.key 2048 |
然後使用以下命令建立自簽名根CA(證書頒發機構)證書。
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem |
“ req”命令建立一個自簽名證書,用作根CA。
系統將提示您輸入一些證書資訊。我使用了所有預設設定,因此只需在每個提示下按Enter。
下一步是將自簽名的根CA證書新增到瀏覽器中的受信任證書。您將在下面找到有關Chrome和Firefox瀏覽器的教程。
將自簽名SSL證書新增到Chrome瀏覽器中的受信任證書
轉到Chrome瀏覽器設定(單擊右上角的三個點)。
- 然後點選左側的“隱私和安全”選單;
- 選擇“安全性”選單項;
- 然後滾動到底部,然後在“高階”部分中選擇“管理證書”部分。
- 選擇“許可權”標籤,然後單擊“匯入”按鈕。
- 然後選擇您先前建立的“ rootCA.pem”檔案。至少檢查“信任此證書以標識網站”,然後單擊“確定”。
就是這樣。現在,Chrome瀏覽器信任我們最近將建立的證書。
建立域SSL證書通用配置
準備用於建立域SSL證書的配置檔案。這是一項一次性的任務。您最近可以將其用於多個本地域。
使用以下內容建立一個名為“ server.csr.cnf”的證書配置檔案。
[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn <p class="indent">[dn] C=US ST=RandomState L=RandomCity O=RandomOrganization OU=RandomOrganizationUnit emailAddress=example@example.com CN = ${ENV::SSL_DOMAIN_TEMP} |
使用以下內容建立一個名為“ v3.ext”的擴充套件檔案:
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names <p class="indent">[alt_names] DNS.1 = ${ENV::SSL_DOMAIN_TEMP} |
我們將在此處使用環境變數“ SSL_DOMAIN_TEMP”。在不同的域中重用此配置將更加容易。
建立域SSL證書
將我們要建立SSL證書的域名設定為環境變數“ SSL_DOMAIN_TEMP”。
export SSL_DOMAIN_TEMP=myapp.local
然後建立“ crt”和“ key”檔案。兩者都是SSL證書的一部分。“ crt”檔案是簽名的SSL證書,“ key”檔案是該檔案的私鑰。
建立一個“金鑰”檔案命令:
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf ) |
建立一個“ crt”檔案命令。
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext |
建立新的資料夾“ certificates”。如果要使用Docker Compose,它可能在專案資料夾中。或在任何資料夾中,如果您在不使用Docker的情況下使用Nginx。
然後將域SSL證書檔案(“ server.crt”和“ server.key”)複製到新資料夾。可以刪除檔案“ server.csr”。
Nginx HTTPS配置示例
如果您使用本教程中的Docker,則需要建立一個Nginx配置檔案。在專案資料夾中建立一個新檔案“ default.conf”。
這是啟用HTTPS的localhost的基本Nginx配置。
server { server_name _; listen 80 default_server; listen 443 ssl; ssl_certificate /var/server.crt; ssl_certificate_key /var/server.key; location / { root /usr/share/nginx/html/; index index.html index.htm; } } |
如果您不使用Docker,則將此配置用作本地Nginx配置的基礎。
使用Docker Compose執行Nginx
如果您不使用Docker,則可以跳過這一部分。
在專案目錄中建立“ docker-compose.yml”檔案。我們這裡已經有資料夾“ certificates”。
使用以下內容填充docker-compose.yml。
version: '3' services: nginx: image: nginx:alpine ports: - 80:80 - 443:443 volumes: - ./default.conf:/etc/nginx/conf.d/default.conf - ./certificates/server.crt:/var/server.crt - ./certificates/server.key:/var/server.key |
我們做了:
- 從輕量級Alpine映象建立一個簡單的Nginx容器
- 從容器映象 80(HTTP)和443(HTTPS)埠
- 在Docker容器中掛載Nginx配置和SSL證書
如果您正在執行其他Web伺服器,則Docker無法對映埠80和443。因此,要麼停止Web伺服器,要麼更改對映的埠,例如“ -81:80”。在這種情況下,您將使用帶有埠的URL(即http:// localhost:81)測試網站。
無需手動建立證書的解決方案
這裡是一些簡單的解決方案。選擇任何一個。
相關文章
- https如何工作的HTTP
- 在Apache上實現多HTTPS虛擬主機ApacheHTTP
- Https工作原理&TLS握手機制HTTPTLS
- Mkcert — 讓你在 Localhost 與 IP 環境中也能安裝 SSL 證書,啟用 HTTPS 協議 — TechMoon 科技月球mkcertlocalhostHTTP協議
- 在網頁上調起本機C#程式網頁C#
- Vue開發 localhost 替換成 本機ip無法訪問Vuelocalhost
- HTTPS工作原理HTTP
- 程式設計師如何讓自己的工作更上一層樓程式設計師
- async/await 在 C# 語言中是如何工作的?(上)AIC#
- HTTPS工作流程HTTP
- 如何免費的讓網站啟用HTTPS網站HTTP
- 在Apple Silicon Macs上如何安裝Rosetta 2?非本機Intel x86應用如何在M1上執行?APPMacROSIntel
- Ollama,在centos7宿主機上,curl http://宿主機IP:11434 提示拒絕訪問 ,但是curl http://localhost:11434 正常CentOSHTTPlocalhost
- 在Apple Watch上如何讓你的圖片響應式APP
- HTTPS代理的工作原理HTTP
- 讓HTTPS簡單易懂HTTP
- MacBook上使用ssh localhost被拒絕Maclocalhost
- 在.NET 6.0上使用Kestrel配置和自定義HTTPSHTTP
- 透過 ForwardAgent ,在遠端機器上,使用本機 ssh key 進行驗證Forward
- mmc如何管理本機上的(數字/x.509)證書
- 深入淺出HTTPS工作原理HTTP
- http,https的工作流程HTTP
- 深入理解HTTPS工作原理HTTP
- 分分鐘讓你理解HTTPSHTTP
- 如何使用ANSIBLE在遠端主機上建立RabbitMQMQ
- 使用scp將linux伺服器中的檔案傳到windows本地主機上Linux伺服器Windows
- 如何讓筆記本使用壽命更長筆記
- HSTS 詳解,讓 HTTPS 更安全HTTP
- Python鬥地主Python
- 如何讓資料清洗工作變得簡單
- 遊戲化機制研究:遊戲是如何讓人“上癮”的?遊戲
- python如何獲取本機ipPython
- 如何通過隧道將本地主機連線到公共網際網路上 - Vlad Mihalcea
- RPM索引在Artifactory中是如何工作索引
- 讓Apache Beam在GCP Cloud Dataflow上跑起來ApacheGCCloud
- 如何讓工作計劃顯示在桌面上面?電腦桌面日程安排軟體
- ITSM的服務檯如何讓工作更流暢
- SMT上板機工作原理與操作流程