使用一个开源软件,可以制作本地可信证书(用于开发)

发布时间 2023-05-25 15:01:18作者: MyMemo

使用一个开源软件,可以制作本地可信证书(用于开发)
https://github.com/FiloSottile/mkcert

在 Windows 上,使用Chocolatey的命令安装:

choco install mkcert

安装后,执行命令,即可在浏览器中创建根证书,在当前目录创建两个pem文件,一个是证书,一个是私钥(不会在certlm.msc中创建证书)

mkcert 127.0.0.1

返回:

Created a new certificate valid for the following names
 - "127.0.0.1"
The certificate is at "./127.0.0.1.pem" and the key at "./127.0.0.1-key.pem"
It will expire on 9 July 2025

可以在管理员权限的CMD下运行下面的命令,将两个pem文件合并为一个带私钥的pfx格式的证书文件。

openssl pkcs12 -export -out certificate.pfx -inkey 127.0.0.1-key.pem -in 127.0.0.1.pem

在写好一个self-host的WCF Service后,还需要执行下面的PowerShell脚本来打开端口,以及创建SSL/TLS绑定:

# 使用powershell脚本,打开端口 8088
New-NetFirewallRule -DisplayName "Allow Port 8088" -Direction Inbound -LocalPort 8088 -Protocol TCP -Action Allow

# 创建 SSL/TLS 绑定
netsh http add sslcert ipport=127.0.0.1:8087 certhash=1918c98b805fbcab57d16b27c6b25009a35ab8de appid='{F29BD455-202D-4DEB-8002-A3A2D9B52CED}'
# Add urlacl
netsh http add urlacl https://+:8087/MyWcfService/ user=运行此self-host server的用户名

对上述命令的说明

  • ipport 域名或IP: 端口
  • certhash 证书指纹
  • appid 是一个应用程序标识符,用于标识使用 SSL/TLS 绑定的应用程序。它的值是一个 GUID,可以是任意的 GUID,只要它是唯一的即可。

如果你想同时使用域名和 IP 地址访问网站,建议同时配置基于域名和 IP 地址的 SSL/TLS 绑定。在 netsh 命令中,你可以使用 IP 地址和端口号来设置一个基于 IP 地址的 SSL/TLS 绑定,使用域名和端口号来设置另一个基于域名的 SSL/TLS 绑定。这样,无论用户使用域名还是 IP 地址来访问你的网站,都可以建立 SSL/TLS 连接并访问网站。

https://127.0.0.1:8080/MyWcfService
https://localhost:8080/MyWcfService

可以使用以下命令来列出计算机上所有的 SSL/TLS 绑定:

netsh http show sslcert | Select-String 'IP:|Certificate Hash|Application ID|Certificate Store|SSL Protocol' | Out-String -stream | ConvertFrom-Csv -Delimiter ":" | Format-Table -AutoSize

使用以下命令来列出计算机上所有的 URLACL:

netsh http show urlacl

URLACL 全称是 URL Access Control List,它是 Windows 中一种控制网络权限的机制。URLACL 可以让你为一个特定的 URL(或 URL 模式)配置安全权限,以控制哪些用户或组可以访问该 URL,以及以何种方式进行访问。

URLACL 可以在 Windows 中的 HTTP.SYS 内核级别配置,因此可以在不同的应用程序或服务之间共享。在 Windows 中,IIS 和 WCF 服务等应用程序都使用 URLACL 来配置其 HTTP 终结点。同时,通过使用 netsh 命令,用户也可以对 URLACL 进行查询、添加、删除等操作,以满足自己的需求。