局域网SSL认证教程


目的:在局域网内部使用https会弹出不是私密连接,我们想取消这一步骤,使得https在局域网中是信任的

1.现状描述

我们测试访问使用自签名证书的内网地址,发现提示不安全

image.png

我们想达到的效果:直接访问,左上角不提示不安全

image.png

2.工具介绍

如果要在局域网达到效果需要满足以下几点要求:

1
2
3
1.	证书由可信任的CA机构颁发
2. 证书在有效期
3. 访问地址和证书的认证地址一致

也就是说,我们需要做到以下几件事:

1
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) or
    • update-ca-certificates (Ubuntu, Debian, OpenSUSE, SLES) or
    • trust (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下载对应系统的版本

image.png

2.1.2安装根证书

打开文件保存的位置,在地址栏输入cmd打开命令提示符image.png

可以把下载的文件改名便于输入,比如改成mkcert.exe

输入mkcert.exe -install来安装根证书image.png

出现提示要选择是

出现下图提示就代表根证书已经安装好了image.png

需要卸载则将install替换成uninstall即可

2.2自签证书

2.2.1生成自签证书

在命令行输入mkcert.exe <要生成的ip或域名>

然后回车,证书就会被保存在软件目录下,一张证书可以包含多个域名或ip

1
mkcert-v1.4.3-windows-amd64.exe 192.168.1.5 192.168.1.6

image.png

控制台中表明生成了192.168.1.5+1.pem证书文件和192.168.1.5+1-key.pem私钥文件

image.png

2.2.2使用证书

在nginx中配置ssl用于测试

1
2
3
4
5
6
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查看根证书位置

image.png

这里的rootCA.pem就是你的根证书image.png

我们需要将rootCA.pem复制一份并改名为rootCA**.crt**

将rootCA.crt拷贝给局域网的其他人,进行安装

2.4安装证书

image.png

存储位置选择本地计算机image.png

现在访问测试

image.png

可以看到左上角变成安全标识,警告?页面也不会弹出。至此局域网就的ssl认证就完成了。