我正在开发一个自托管的WCF服务,可以选择加密通信。当证书已经按照here所述绑定到端口时,一切正常。
但是,我想避免要求用户运行命令行工具。有没有办法以编程方式完成绑定?也许使用WMI?
答案 0 :(得分:4)
我认为创建HTTP.SYS名称空间保留的方法是通过HttpSetServiceConfiguration()非托管API;所以你需要一些P / Invoke。在one of Keith Brown的MSDN专栏中可能会有一些示例代码。
答案 1 :(得分:3)
我发现这个NuGet库可以帮助以编程方式绑定SSL证书。
这个问题相当陈旧,但我认为对于那些寻求纯.Net编程方式将SSL证书绑定到IP端点的人来说,这个库可能对我有帮助。
图书馆名称(NuGet): SslCertBinding.Net
资料来源:GitHub NuGet package sources
库描述:
SslCertBinding.Net是一个用于.NET和Windows的库,它提供了一个简单的API来添加,删除或检索https端口和SSL证书之间的绑定。< p>
致谢:Segor
此库基于Win32API调用构建。
有关用法,请查看上面的GitHub NuGet包源链接'Usage' section。
答案 2 :(得分:2)
MSDN documentation,基思·布朗的MSDN column和pinvoke.net让我大部分都在那里。但是在HTTP_SERVICE_CONFIG_SSL_KEY中获取PSOCKADDR是正确的。我发现Beej's Guide to Network Programming非常有助于弄清楚应该的样子。我能够使用.NET SocketAddress,然后将字节复制到可以编组的数组中。
// serialize the endpoint to a SocketAddress and create an array to hold the values. Pin the array.
SocketAddress socketAddress = ipEndPoint.Serialize();
byte[] socketBytes = new byte[socketAddress.Size];
GCHandle handleSocketAddress = GCHandle.Alloc(socketBytes, GCHandleType.Pinned);
// Should copy the first 16 bytes (the SocketAddress has a 32 byte buffer, the size will only be 16, which is what the SOCKADDR accepts
for (int i = 0; i < socketAddress.Size; ++i)
{
socketBytes[i] = socketAddress[i];
}
答案 3 :(得分:1)
是的,但您必须自己使用the HTTP API哪个目前没有.NET包装器,因此您必须使用P / Invoke。具体来说,我认为你正在寻找带有HttpServiceConfigSSLCertInfo配置ID的HttpSetServiceConfiguration。