以编程方式将SSL证书绑定到端口

时间:2009-11-09 17:42:57

标签: .net windows wcf wmi

我正在开发一个自托管的WCF服务,可以选择加密通信。当证书已经按照here所述绑定到端口时,一切正常。

但是,我想避免要求用户运行命令行工具。有没有办法以编程方式完成绑定?也许使用WMI?

4 个答案:

答案 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 columnpinvoke.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