使用mkcert生成的根证书,只和本机有关,其他主机安装以后,也只会识别本机生成的证书。其他主机使用mkcert -install以后生成的rootCA根证书,不会识别本机的证书,且其他主机生成的证书,也不会被安装了本机 rootCA 的主机识别。
这里可以直接使用windows版本的 mkcert-v1.4.4-windows-amd64.exe ,改名为mkcert.exe,不改也行。
执行命令安装RootCA,提示框选‘是’确认安装即可
.\mkcert.exe -install
查看RootCA安装位置
.\mkcert.exe -CAROOT
我这里显示的是 C:\Users\admin\AppData\Local\mkcert,打开路径,有两个文件
rootCA.pem (公钥,可以改成 .crt 后缀,用于系统信任根证书)
rootCA-key.pem (私钥,可以用于添加防火墙信任)
这里将 rootCA.pem 复制一份,备份更名为 rootCA.crt
为IP生成证书,后面可以跟多个IP或者域名,空格隔开即可,会在mkcert.exe同级目录生成 x.pem和x-key.pem ,有几个域名就会有几组这个文件
.\mkcert.exe 192.168.110.192
#也可以跟多组,这样一个证书文件可以达到配置识别多个IP或者域名的效果
#如 .\mkcert.exe 192.168.110.192 123.123.x.x shengzilong.com
我这里生成了两个文件
192.168.110.192.pem
192.168.110.192-key.pem
到这一步已经可以直接放在nginx中当做ssl使用,如下配置即可
listen 8888 ssl;
ssl_certificate /opt/192.168.110.192.pem;
ssl_certificate_key /opt/192.168.110.192-key.pem;
根证书安装包制作
要使前端浏览器信任证书,就要用户主动安装之前的 rootCA.crt ,因此需要做一个安装包
证书导入代码编译
编译一个基于 .NetFramework4.5 的 console 即可.也可以根据需要使用 clickonce 发布为自动下载依赖包的运行包,或者直接使用最小编译。这里生成了一个名为 InstallCert.exe 的可执行文件。
using System.Security.Cryptography.X509Certificates;
/**安装CA的根证书到受信任根证书颁发机构**/
//根证书文件路径,这里直接配置为程序运行目录下,也可以指定其他目录,但是需要配置InnoSetup安装时释放文件到对应目录
var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "rootCA.crt");
var certificate = new X509Certificate2(filepath);
var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.Remove(certificate);
store.Add(certificate);
store.Close();
console编译时要添加一个权限申请,可以在项目上右键属性,选择安全性->启用ClickOnce,保存后取消选择再保存
此时生成了一个 app.manifest 文件,将权限申请改为 requireAdministrator 。
使用 InnoSetup 制作安装包
下载 InnoSetup
安装后打开 InnoSetup ,点击 file->new 打开创建向导,填写一些基本属性
这里取消所有选项,使用默认应用文件夹释放文件。如果证书导入代码console里不是使用程序运行目录,则这一步需要指定相应的文件释放目录。
可执行文件选择之前生成的exe,其他应用文件添加之前生成的 rootCA.crt 证书。同时这里勾选允许用户在安装后直接运行应用。
这一步默认
这一步取消所有选项,不需要多次安装或者添加到开始菜单
这一步如果有授权文件或者要在安装前后展示的内容可以添加,这里留空。
这一步就是选择为所有用户安装还是为当前账户安装,也可以由用户选择。因为这里只用到打包执行的功能,因此选任何一个都行。这里选择了为所有用户安装。
语言这块默认即可
这里选择编译后的安装包的输出文件夹,随意选择本机一个目录即可,安装包命名也随意即可
最后一步提示是否直接编译,第一次编译的话这里选择否,因为要配置管理员权限运行
选择否以后,会打开刚才生成的打包文件,这里主要关注权限申请,将图示内容修改一下
取消注释修改为admin
保存一下当前的打包文件
打开 InnoSetup 的安装目录,找到 SetupLdr.e32 文件
使用 ResourceHacker 打开,如图找到 Manifest 中权限申请部分
将 asInvoker 修改为 requireAdministrator
点击三角箭头编译,点击保存按钮保存
原始的e32文件将会被备份
现在再次打开InnoSetup,可以选择使用管理员权限打开,选择刚才保存的打包文件
点击编译按钮
输出栏输出编译成功提示信息
在之前选择的安装文件输出目录下,可以看到安装文件生成了
运行生成的安装文件
确认直接运行,会有一个小黑框一闪而过,就是执行了证书安装程序。
现在打开证书管理器确认一下
在受信任的根证书颁发机构中,已经添加了mkcert生成的根证书了
而现在再打开nginx中配置了mkcert证书的界面,浏览器也提示连接安全小绿锁了。