抄袭下面网站的内容。没有新意。
http://www.pinvoke.net/default.aspx/httpapi.httpsetserviceconfiguration
public static void SetCertificate(string ipAddress, int port, byte[] hash, bool isAdd)
{
uint retVal = (uint)NOERROR;
// initialize http
retVal = HttpInitialize(new HTTPAPI_VERSION(1, 0), HTTP_INITIALIZE_CONFIG, IntPtr.Zero);
if ((uint)NOERROR != retVal)
{
throw new Win32Exception(Convert.ToInt32(retVal));
}
HTTP_SERVICE_CONFIG_SSL_SET configSslSet = new HTTP_SERVICE_CONFIG_SSL_SET();
HTTP_SERVICE_CONFIG_SSL_KEY configSslKey = new HTTP_SERVICE_CONFIG_SSL_KEY();
HTTP_SERVICE_CONFIG_SSL_PARAM configSslParam = new HTTP_SERVICE_CONFIG_SSL_PARAM();
// set HTTP_SERVICE_CONFIG_SSL_KEY
IPAddress ip = IPAddress.Parse(ipAddress);
IPEndPoint ipEndPoint = new IPEndPoint(ip, port);
SocketAddress socketAddress = ipEndPoint.Serialize();
byte[] socketBytes = new byte[socketAddress.Size];
GCHandle handleSocketAddress = GCHandle.Alloc(socketBytes, GCHandleType.Pinned);
for (int i = 0; i < socketAddress.Size; ++i)
{
socketBytes[i] = socketAddress[i];
}
configSslKey.pIpPort = handleSocketAddress.AddrOfPinnedObject();
// set HTTP_SERVICE_CONFIG_SSL_PARAM
configSslParam.AppId = Guid.Empty;
configSslParam.DefaultCertCheckMode = 0;
configSslParam.DefaultFlags = 0;
configSslParam.DefaultRevocationFreshnessTime = 0;
configSslParam.DefaultRevocationUrlRetrievalTimeout = 0;
configSslParam.pSslCertStoreName = null;
configSslParam.pSslHash = GCHandle.Alloc(hash, GCHandleType.Pinned).AddrOfPinnedObject();
configSslParam.SslHashLength = hash.Length;
// set HTTP_SERVICE_CONFIG_SSL_SET
configSslSet.ParamDesc = configSslParam;
configSslSet.KeyDesc = configSslKey;
// convert Structure To Ptr
IntPtr pInputConfigInfo = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_SSL_SET)));
Marshal.StructureToPtr(configSslSet, pInputConfigInfo, false);
// set or delete
if (isAdd)
{
retVal = HttpSetServiceConfiguration(
IntPtr.Zero,
HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSSLCertInfo,
pInputConfigInfo,
Marshal.SizeOf(configSslSet),
IntPtr.Zero);
}
else
{
retVal = HttpDeleteServiceConfiguration(
IntPtr.Zero,
HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSSLCertInfo,
pInputConfigInfo,
Marshal.SizeOf(configSslSet),
IntPtr.Zero);
}
// free memory
Marshal.FreeCoTaskMem(pInputConfigInfo);
// terminate http
HttpTerminate(HTTP_INITIALIZE_CONFIG, IntPtr.Zero);
if ((uint)NOERROR != retVal)
{
throw new Win32Exception(Convert.ToInt32(retVal));
}
}
本文介绍了一个静态方法SetCertificate,用于设置或删除指定IP地址和端口的SSL证书配置。该方法通过初始化HTTP服务并调用相应的API来实现SSL证书的设置或删除。
7650

被折叠的 条评论
为什么被折叠?



