问题:现在的三大浏览器,chrome、edge、firefox 一般都默认启用https检查,这就要求我们自建的局域网内的网址和其他诸如nextcloud、photoprism、tiddlywiki等应用也必须要有证书。解决方法是使用openssl自己生成一个。由此则会再衍生出一个问题,如何让浏览器信任我们的自签名证书,避免每次都要确认接受风险的操作呢?
一、用openssl 构建CA证书
1.1 手动一步一步填国家、组织等信息
openssl req -new -x509 -newkey rsa:4096 -keyout ca-key.key -out ca-crt.crt -days 3650
1.2 附带参数,一步到位
openssl req -new -x509 -newkey rsa:4096 -days 3650 -nodes -keyout ca-key.pem -out ca-crt.pem -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=Organization/OU=Company/CN=Test/emailAddress=test@company.com"
二、利用自建CA证书创建网址和服务所需的自签名证书
2.1 手动填写信息
openssl req -new -x509 -out web.crt -noenc -keyout web.key -CA ca-crt.crt -CAkey ca-key.key
2.2 附带参数,一步到位
openssl req -new -x509 -out web.crt -noenc -keyout web.key -CA ca-crt.crt -CAkey ca-key.key -addext "subjectAltName = IP.0:192.168.1.222, IP.1:206.237.18.222,DNS.1:wiki.company.com" -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=Organization/OU=Company/CN=Test/emailAddress=test@company.com"
注意: 关键之处是“ -addext "subjectAltName = IP.0:192.168.1.222, IP.1:206.237.18.222,DNS.1:wiki.company.com" ” 这一句。 IP.0: 跟的是局域网内该web的私有地址;IP.1: 跟的是通过frpc透传到frpc服务器上,进行公网服务的 IP地址; DNS.1: 跟的是公网服务器为该服务所绑定的 二级域名。
这样导入ca-crt.crt 证书后, 通过 https://192.168.1.222 https://iki.company.com 登录服务,就可以直接进入应用页面了。
三、证书的使用
上述两步完成后,会生成四个文件:ca-crt.crt ca-key.key web.crt web.key 。看名称就知道分为了CA证书和网址要用到的自签名证书。 根据你的网址服务器软件和其他提供服务的软件中关于SSL证书使用的说明添加、应用即可。
让浏览器信任我们的web证书,需要导入ca-crt.crt导入到我们的Windows系统中。
方法1:双击证书,按步骤安装证书到“受信任的根证书颁发机构”。
方法2:从浏览器设置中进行导入。 edge 为例