本文内容有两个部分: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访问到内网的本地服务啦。