Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Tools / WSATConfig / Configuration / WsatServiceCertificate.cs / 1305376 / WsatServiceCertificate.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace Microsoft.Tools.ServiceModel.WsatConfig { using System; using System.Net; using System.Runtime.InteropServices; using System.Security.Cryptography.X509Certificates; class WsatServiceCertificate { X509Certificate2 cert; uint port; string certificateStore = "MY"; internal WsatServiceCertificate(X509Certificate2 cert, uint port) { this.cert = cert; this.port = port; } internal void BindSSLCertificate() { if (Utilities.IsHttpApiLibAvailable) { BindSSL(); } } internal void UnbindSSLCertificate() { if (Utilities.IsHttpApiLibAvailable) { this.UnbindSSL(); } } void BindSSL() { int retVal = SafeNativeMethods.NoError; WinsockSockAddr sockAddr = null; try { retVal = SafeNativeMethods.HttpInitialize(HttpWrapper.HttpApiVersion1, SafeNativeMethods.HTTP_INITIALIZE_CONFIG, IntPtr.Zero); if (SafeNativeMethods.NoError == retVal) { IntPtr pOverlapped = IntPtr.Zero; sockAddr = new WinsockSockAddr(new IPAddress(0), (short)this.port); HttpServiceConfigSslSet sslConf = new HttpServiceConfigSslSet(); sslConf.KeyDesc.pIpPort = sockAddr.PinnedSockAddr; sslConf.ParamDesc.DefaultCertCheckMode = 0; sslConf.ParamDesc.DefaultFlags = SafeNativeMethods.HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT; sslConf.ParamDesc.DefaultRevocationFreshnessTime = 0; sslConf.ParamDesc.pSslCertStoreName = certificateStore; byte[] sslHash = this.cert.GetCertHash(); sslConf.ParamDesc.pSslHash = new SafeLocalAllocation(sslHash.Length); sslConf.ParamDesc.pSslHash.Copy(sslHash, 0, sslHash.Length); sslConf.ParamDesc.SslHashLength = sslHash.Length; int configInformationLength = Marshal.SizeOf(sslConf); retVal = SafeNativeMethods.HttpSetServiceConfiguration_Ssl(IntPtr.Zero, HttpServiceConfigId.HttpServiceConfigSSLCertInfo, ref sslConf, configInformationLength, pOverlapped); if (SafeNativeMethods.ErrorAlreadyExists == retVal) { retVal = SafeNativeMethods.HttpDeleteServiceConfiguration_Ssl(IntPtr.Zero, HttpServiceConfigId.HttpServiceConfigSSLCertInfo, ref sslConf, configInformationLength, IntPtr.Zero); if (SafeNativeMethods.NoError == retVal) { retVal = SafeNativeMethods.HttpSetServiceConfiguration_Ssl(IntPtr.Zero, HttpServiceConfigId.HttpServiceConfigSSLCertInfo, ref sslConf, configInformationLength, pOverlapped); } } GC.KeepAlive(sockAddr); sslConf.ParamDesc.pSslHash.Close(); } } finally { if (sockAddr != null) { sockAddr.Dispose(); } SafeNativeMethods.HttpTerminate(SafeNativeMethods.HTTP_INITIALIZE_CONFIG, IntPtr.Zero); } if (SafeNativeMethods.NoError != retVal) { if (SafeNativeMethods.ErrorAlreadyExists == retVal) { throw new WsatAdminException(WsatAdminErrorCode.HTTPS_PORT_SSL_CERT_BINDING_ALREADYEXISTS, SR.GetString(SR.ErrorHttpsPortSSLBindingAlreadyExists)); } else { throw new WsatAdminException(WsatAdminErrorCode.HTTPS_PORT_SSL_CERT_BINDING, SR.GetString(SR.ErrorHttpsPortSSLBinding, retVal)); } } } void UnbindSSL() { int retVal = SafeNativeMethods.NoError; WinsockSockAddr sockAddr = null; try { retVal = SafeNativeMethods.HttpInitialize(HttpWrapper.HttpApiVersion1, SafeNativeMethods.HTTP_INITIALIZE_CONFIG, IntPtr.Zero); if (SafeNativeMethods.NoError == retVal) { IntPtr pOverlapped = IntPtr.Zero; sockAddr = new WinsockSockAddr(new IPAddress(0), (short)this.port); HttpServiceConfigSslSet sslConf = new HttpServiceConfigSslSet(); sslConf.KeyDesc.pIpPort = sockAddr.PinnedSockAddr; sslConf.ParamDesc.DefaultCertCheckMode = 0; sslConf.ParamDesc.DefaultFlags = SafeNativeMethods.HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT; sslConf.ParamDesc.DefaultRevocationFreshnessTime = 0; sslConf.ParamDesc.pSslCertStoreName = certificateStore; byte[] sslHash = this.cert.GetCertHash(); sslConf.ParamDesc.pSslHash = new SafeLocalAllocation(sslHash.Length); sslConf.ParamDesc.pSslHash.Copy(sslHash, 0, sslHash.Length); sslConf.ParamDesc.SslHashLength = sslHash.Length; int configInformationLength = System.Runtime.InteropServices.Marshal.SizeOf(sslConf); retVal = SafeNativeMethods.HttpDeleteServiceConfiguration_Ssl(IntPtr.Zero, HttpServiceConfigId.HttpServiceConfigSSLCertInfo, ref sslConf, configInformationLength, pOverlapped); sslConf.ParamDesc.pSslHash.Close(); GC.KeepAlive(sockAddr); } } finally { if (sockAddr != null) { sockAddr.Dispose(); } SafeNativeMethods.HttpTerminate(SafeNativeMethods.HTTP_INITIALIZE_CONFIG, IntPtr.Zero); } if (retVal != SafeNativeMethods.NoError && retVal != SafeNativeMethods.FileNotFound && retVal != SafeNativeMethods.ErrorInvalidParameter) { throw new WsatAdminException(WsatAdminErrorCode.HTTPS_PORT_SSL_CERT_UNBINDING, SR.GetString(SR.ErrorHttpsPortSSLUnbinding, retVal)); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataTableNewRowEvent.cs
- GridViewHeaderRowPresenter.cs
- NoResizeSelectionBorderGlyph.cs
- StringDictionary.cs
- MenuItemAutomationPeer.cs
- PaintEvent.cs
- WSDualHttpBindingElement.cs
- DocumentGrid.cs
- ProcessStartInfo.cs
- CreateParams.cs
- OutputCacheProfile.cs
- DbUpdateCommandTree.cs
- rsa.cs
- DbConnectionStringBuilder.cs
- MimeFormatExtensions.cs
- HMAC.cs
- Classification.cs
- RoleGroup.cs
- CompilerTypeWithParams.cs
- backend.cs
- SectionXmlInfo.cs
- cookiecontainer.cs
- StringConcat.cs
- SelectionChangedEventArgs.cs
- wgx_sdk_version.cs
- EntityDesignerUtils.cs
- EFTableProvider.cs
- Color.cs
- HandleInitializationContext.cs
- CollectionChangeEventArgs.cs
- Site.cs
- MetadataExporter.cs
- CaseExpr.cs
- WindowsPrincipal.cs
- DiscoveryInnerClientAdhoc11.cs
- ForEachAction.cs
- BamlWriter.cs
- ConfigurationHandlersInstallComponent.cs
- BookmarkInfo.cs
- ConstraintCollection.cs
- StaticExtension.cs
- HttpWrapper.cs
- RoutedCommand.cs
- MessageQueuePermissionEntry.cs
- WMICapabilities.cs
- BreakRecordTable.cs
- StorageConditionPropertyMapping.cs
- WindowsUpDown.cs
- SharedPerformanceCounter.cs
- Empty.cs
- WmpBitmapDecoder.cs
- XD.cs
- CollectionsUtil.cs
- DesignRelation.cs
- MetadataCollection.cs
- ElasticEase.cs
- FloaterBaseParagraph.cs
- SiteMapNodeItemEventArgs.cs
- SymLanguageType.cs
- ToolStripManager.cs
- MSAAWinEventWrap.cs
- MessageFormatterConverter.cs
- DBConnection.cs
- HttpCachePolicyWrapper.cs
- CompiledQueryCacheKey.cs
- MultiAsyncResult.cs
- AudioException.cs
- SafeNativeMethodsCLR.cs
- LayoutTable.cs
- Command.cs
- ContextStaticAttribute.cs
- XmlSchemaSubstitutionGroup.cs
- InheritanceAttribute.cs
- ArithmeticLiteral.cs
- CodeVariableReferenceExpression.cs
- EndpointConfigContainer.cs
- PackageRelationshipCollection.cs
- MenuAdapter.cs
- WebPartDesigner.cs
- StylusButtonCollection.cs
- BoolLiteral.cs
- XAMLParseException.cs
- CrossAppDomainChannel.cs
- InheritanceContextHelper.cs
- AsyncDataRequest.cs
- XPathSelfQuery.cs
- InheritanceAttribute.cs
- RevocationPoint.cs
- BinHexDecoder.cs
- PagesSection.cs
- ChildrenQuery.cs
- ResourceIDHelper.cs
- XmlNamedNodeMap.cs
- ListSurrogate.cs
- DataGridCell.cs
- CustomAttributeBuilder.cs
- StyleCollection.cs
- ExtenderControl.cs
- KoreanCalendar.cs
- SqlDataSourceSelectingEventArgs.cs