我现在在 QA 中使用 SSL 的自签名 (makecert.exe) 证书测试了一个自托管 WCF 服务。如果使用管理员权限和 .BAT 文件启动 Web 服务,则程序启动 SSL 端点没有问题。
但是,如果我将 Web 服务作为普通 Windows 服务启动,以“NT Authority\System”身份运行,程序将经常(但并非总是如此?!)无法启动,抛出“可能没有私钥是能够进行密钥交换或进程可能没有访问私钥的权限”
这是我使用的 makecert 命令:
makecert -iv Cas_temp_Authority.pvk -n "CN=ServerName" ServerName.cer -sv
ServerName.pvk -ic ServerName.cer -sr localmachine -ss my -sky exchange -pe -eku
1.3.6.1.5.5.7.3.1
我使用此 netshell 命令将证书分配给端口
netsh http add sslcert ipport=0.0.0.0:8086 certhash=755f7fcf49ff3f06d9d7e551a10ef35776f2dc57
appid={42e1d4bf-7106-4666-90f7-4634456fb7f1} clientcertnegotiation=enable
我使用这个 netshell 命令来设置端口权限:
netsh http add urlacl url=https://+:8086/ServiceName/MethodName/
user="NT Authority\System"
我知道证书或编程代码没有任何问题;如果出现问题,服务将根本无法启动。这里的问题是它只能以管理员身份使用 .EXE 启动,并且不会作为普通的 Windows 服务启动。
我会很感激任何帮助。