目的:在局域网内部使用https会弹出不是私密连接,我们想取消这一步骤,使得https在局域网中是信任的
1.现状描述
我们测试访问使用自签名证书的内网地址,发现提示不安全
我们想达到的效果:直接访问,左上角不提示不安全
2.工具介绍
如果要在局域网达到效果需要满足以下几点要求:
1. 证书由可信任的CA机构颁发
2. 证书在有效期
3. 访问地址和证书的认证地址一致
也就是说,我们需要做到以下几件事:
1. 需要在局域网内构建CA机构
2. 证书的有效期建议设置长一点,毕竟在内网使用,升级比较麻烦
3. 生成的自签证书其中包含的域名或ip要和浏览器中访问的域名或ip保持一致
这里我向大家介绍一个工具-mkcert
mkcert
mkcert是一个使用go语言编写的生成本地自签证书的小程序,具有跨平台,使用简单,支持多域名,自动信任CA等一系列方便的特性可供本地开发时快速创建https环境使用。
mkcert的浏览器根据操作系统的不同生效也不同:
mkcert supports the following root stores:
- macOS system store
- Windows system store
Linux variants that provide either
update-ca-trust
(Fedora, RHEL, CentOS) orupdate-ca-certificates
(Ubuntu, Debian, OpenSUSE, SLES) ortrust
(Arch)
- Firefox (macOS and Linux only)
- Chrome and Chromium
- Java (when
JAVA_HOME
is set)
我这里使用Windows系统进行演示
2.1.1安装
首先去https://github.com/FiloSottile/mkcert/releases下载对应系统的版本
2.1.2安装根证书
打开文件保存的位置,在地址栏输入cmd打开命令提示符
可以把下载的文件改名便于输入,比如改成mkcert.exe
输入mkcert.exe -install来安装根证书
出现提示要选择是
出现下图提示就代表根证书已经安装好了
需要卸载则将install替换成uninstall即可
2.2自签证书
2.2.1生成自签证书
在命令行输入mkcert.exe <要生成的ip或域名>
然后回车,证书就会被保存在软件目录下,一张证书可以包含多个域名或ip
例
mkcert-v1.4.3-windows-amd64.exe 192.168.1.5 192.168.1.6
控制台中表明生成了192.168.1.5+1.pem证书文件和192.168.1.5+1-key.pem私钥文件
2.2.2使用证书
在nginx中配置ssl用于测试
server {
listen 443 ssl;
ssl_certificate F:/111/192.168.1.5+1.pem;
ssl_certificate_key F:/111/192.168.1.5+1-key.pem;
root "F:/111";
}
这里开启443的ssl端口。根目录为F盘的111文件夹,111/static目录内有一张名为13.jpg的测试图片。
使用局域网电脑访问192.168.1.5/static/13.jpg会出现警告界面,这是因为这台电脑还没有安装根证书,接下来我们就来安装
2.3分发根证书
命令行执行mkcert.exe -CAROOT
查看根证书位置
这里的rootCA.pem就是你的根证书
我们需要将rootCA.pem复制一份并改名为rootCA.crt
将rootCA.crt拷贝给局域网的其他人,进行安装
2.4安装证书
存储位置选择本地计算机
现在访问测试
可以看到左上角变成安全标识,警告⚠页面也不会弹出。至此局域网就的ssl认证就完成了。