本文內容有兩個部分:1.搭建本地https域名訪問、2.實現局域網內其餘設備可訪問。
其中"搭建本地https域名訪問"部分轉載自《MacOS下本身建立根證書和域SSL證書實現https調試》文章。php
先實現本地可經過https及自定義域名訪問到本地的服務,個人系統是MacOS,實現步驟以下:html
第一步是建立一個安全套接層(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
複製代碼
打開【鑰匙串訪問】,左側【鑰匙串】選擇【系統】,【種類】選擇【證書】,而後把剛纔生成的根證書導入進來(根證書是rootCA.pem)。瀏覽器
雙擊此證書,在【信任】設置中,SSL和X.509基本策略兩項選擇【始終信任】。安全
在這裏我生成一個 *.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訪問到內網的本地服務啦。