實現局域網https域名訪問內網服務

本文內容有兩個部分:1.搭建本地https域名訪問、2.實現局域網內其餘設備可訪問。

其中"搭建本地https域名訪問"部分轉載自《MacOS下本身建立根證書和域SSL證書實現https調試》文章。php

搭建本地https域名訪問

先實現本地可經過https及自定義域名訪問到本地的服務,個人系統是MacOS,實現步驟以下:html

  1. 建立根ssl證書
  2. 信任證書
  3. 生成域ssl證書
  4. nginx使用證書並配置代理服務
  5. 本地修改hosts測試

1. 建立根SSL證書

第一步是建立一個安全套接層(CA SSL)根證書。而後可使用此根證書爲可能爲單個域生成的任意數量的證書籤名。node

CA,Catificate Authority,它的做用就是提供證書(即服務器證書,由域名、公司信息、序列號和簽名信息組成)增強服務端和客戶端之間信息交互的安全性,以及證書運維相關服務。nginx

建立 root key,git

$ openssl genrsa -des3 -out rootCA.key 2048
複製代碼

這一步系統將提示您輸入密碼,每次使用此特定密鑰生成證書時都須要輸入該密碼。github

使用生成的密鑰來建立新的根SSL證書。並將其保存爲rootCA.pem。證書有效期爲10年。在這一過程當中,還將被提示輸入其餘可選信息。web

$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem
複製代碼

提示填寫的字段大多均可以直接回車過就好了,只要Common Name字段須要填寫內容,這是生成跟證書後導入到系統的證書名稱,我填的是Local Certificationvim

Country Name (2 letter code) []:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (eg, fully qualified host name) []:Local Certification
複製代碼

2. 信任證書

打開【鑰匙串訪問】,左側【鑰匙串】選擇【系統】,【種類】選擇【證書】,而後把剛纔生成的根證書導入進來(根證書是rootCA.pem)。瀏覽器

鑰匙串導入證書

雙擊此證書,在【信任】設置中,SSL和X.509基本策略兩項選擇【始終信任】。安全

信任證書

3. 生成域ssl證書

在這裏我生成一個 *.lipten.link 的通配域名證書。

建立一個v3.ext文件,以建立一個X509 v3證書。注意咱們指定了subjectAltName選項。

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names

[alt_names]
DNS.1 = *.lipten.link
複製代碼

建立證書密鑰,

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key
複製代碼

這一步填寫域名證書密鑰須要的信息,會展現在瀏覽器的域名證書信息,其中最重要的是Common Name的內容,必須是對應須要https訪問的域名的。

Country Name (2 letter code) []:CN
State or Province Name (full name) []:Province
Locality Name (eg, city) []:City
Organization Name (eg, company) []:WIZ Technology Co. Ltd.
Organizational Unit Name (eg, section) []:WIZ Technology Co. Ltd.
Common Name (eg, fully qualified host name) []:*.lipten.link
複製代碼

證書籤名請求經過咱們以前建立的根SSL證書頒發,建立出一個 *.lipten.link 的域名證書。輸出是一個名爲的證書文件server.crt,

$ openssl x509 -req -in server.csr -CA [rootCA.pem路徑] -CAkey [rootCA.key路徑] -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext
複製代碼

注意 CA 和 CA Key 根據實際狀況填寫路徑,個人 rootCA 證書根域SSL證書是分開的。

如今能夠開始使用這張證書了,我服務器使用的是 nginx,這裏貼下部分配置。

server {
    listen 80;
    listen 443 ssl;
    # 以www.lipten.link域名訪問
    server_name ~^www\.lipten\.link$;
    
    # 配置ssl域名證書
    ssl_certificate     [ssl證書路徑]/server.crt;
    ssl_certificate_key [ssl證書路徑]/server.key;
    
    index index.html index.php;
    # 反向代理須要被訪問的本地服務
    location / {
      proxy_pass http://localhost:8080;
    }
    ...
}
複製代碼

記得重啓nginx

$ nginx -s reload
複製代碼

最後把本地hosts改一下,www.lipten.link指向本地地址

$ sudo vim /etc/hosts
複製代碼

添加如下配置

127.0.0.1   www.lipten.link
複製代碼

效果以下:

效果圖

證書信息

以上已經實現了https自定義域名訪問本地服務,這麼作就能夠在知足不少須要指定域名訪問才能調試的狀況了,不用每次都發遠程服務器啦。

實現局域網內其餘設備可訪問。

但這個方案只能在本地調試,有些第三方sdk還須要在手機對應的app裏訪問才能模擬真正的環境進行sdk的功能調試。

要想讓其餘設備也能以https域名在本地調試,只能是靠路由器hosts實現了,咱們須要一臺已經破解ssh的路由器,至於路由器怎麼破解ssh就不在這裏講述了。

我手裏有一臺刷了Padavan固件的路由器,能夠直接在web管理界面進行hosts配置:

左邊欄選擇內部網絡(LAN) -> 選擇DHCP服務器 -> 點擊底部的自定義配置文件 "hosts"

自定義配置文件

重啓路由器,把其餘設備接入同一個局域網內,就能夠經過https://www.lipten.link訪問到內網的本地服務啦。

相關文章
相關標籤/搜索