搭建本地https域名访问
包括以下步骤
- 创建根ssl证书
- 信任证书(可选)
- 生成域ssl证书
- nginx使用证书并配置代理服务
- 本地修改hosts测试
- 实现局域网内其他设备可访问(可选)
1. 创建根SSL证书
第一步是创建一个安全套接层(CA SSL)根证书。然后可以使用此根证书为可能为单个域生成的任意数量的证书签名。
创建 root key
openssl genrsa -des3 -out rootCA.key 2048
这一步系统将提示您输入密码,每次使用此特定密钥生成证书时都需要输入该密码。该密码非常重要,需要记下来!!!
使用生成的密钥来创建新的根SSL证书。并将其保存为rootCA.pem。证书有效期为10年。在这一过程中,还将被提示输入其他可选信息。
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem
提示填写的字段大多都可以直接回车过就行了,只要Common Name字段需要填写内容,这是生成跟证书后导入到系统的证书名称,我填的是Local Certification
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证书
在这里我生成一个 *.alibaba.com 的通配域名证书。
创建一个v3.ext文件,以创建一个X509 v3证书。注意我们指定了subjectAltName选项。
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names
[alt_names]
DNS.1 = *.alibaba.com
创建证书密钥
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) []:*.alibaba.com
证书签名请求通过我们之前创建的根SSL证书颁发,创建出一个 *.alibaba.com 的域名证书。输出是一个名为的证书文件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证书是分开的。
4.nginx使用证书并配置代理服务
现在可以开始使用这张证书了,我服务器使用的是 nginx,这里贴下部分配置。
server {
listen 80;
listen 443 ssl;
# 以patrol.alibaba.com域名访问
server_name ~^patrol\.alibaba\.com$;
# 配置ssl域名证书
ssl_certificate [ssl证书路径]/server.crt;
ssl_certificate_key [ssl证书路径]/server.key;
...
}
ngnix重启生效。
注意:
1.如果ngnix使用的是docker,记得要修改编排文件,开放443端口!!!
2.如果系统有防火墙,记得开启443端口访问权限和https协议访问权限!!!
5.本地修改hosts测试
最后,在需要访问网站的客户端机器上,把本地hosts改一下,使patrol.alibaba.com 指向本地地址
以mac系统为例
sudo vim /etc/hosts
添加以下配置
192.168.0.212 patrol.alibaba.com
效果如下:
#6. 实现局域网内其他设备可访问(可选)
要想让其他设备也能以https域名在本地调试,只能是靠路由器hosts实现了,我们需要一台已经破解ssh的路由器。
和上一步类似,修改路由器hosts文件,添加
192.168.0.212 patrol.alibaba.com
重启路由器,把其他设备接入同一个局域网内,就可以通过https://patrol.alibaba.com访问到内网的本地服务啦
参考文档: