Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Tools / WSATConfig / Configuration / WsatServiceCertificate.cs / 1 / 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. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DispatcherHookEventArgs.cs
- IFlowDocumentViewer.cs
- EncryptedHeaderXml.cs
- TargetConverter.cs
- LinqDataSourceStatusEventArgs.cs
- AuthenticationModuleElementCollection.cs
- ToolStripItemTextRenderEventArgs.cs
- CngProvider.cs
- DateTimeOffsetConverter.cs
- PathData.cs
- XmlIgnoreAttribute.cs
- XmlTextReaderImpl.cs
- elementinformation.cs
- FieldToken.cs
- GridSplitterAutomationPeer.cs
- AmbientLight.cs
- DataGridItemCollection.cs
- DependencyPropertyDescriptor.cs
- CallTemplateAction.cs
- thaishape.cs
- TextEffectResolver.cs
- ToolStripDropDownClosedEventArgs.cs
- SchemaTableColumn.cs
- CustomErrorsSectionWrapper.cs
- SafeViewOfFileHandle.cs
- httpserverutility.cs
- GenericsInstances.cs
- DataGridViewBindingCompleteEventArgs.cs
- VariantWrapper.cs
- MenuItem.cs
- ReturnEventArgs.cs
- PointHitTestParameters.cs
- ProfileGroupSettingsCollection.cs
- TypeDescriptionProvider.cs
- WebBrowserNavigatedEventHandler.cs
- TextEditorContextMenu.cs
- XmlQueryContext.cs
- HeaderedItemsControl.cs
- BindToObject.cs
- MimeWriter.cs
- DiffuseMaterial.cs
- HyperLinkStyle.cs
- XsltContext.cs
- InfocardClientCredentials.cs
- StyleXamlTreeBuilder.cs
- AsyncSerializedWorker.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- LinearKeyFrames.cs
- TypeBuilderInstantiation.cs
- HashLookup.cs
- ParallelTimeline.cs
- QueryRelOp.cs
- DataGridViewLayoutData.cs
- FormViewInsertedEventArgs.cs
- MethodToken.cs
- ModelServiceImpl.cs
- InputDevice.cs
- SafeProcessHandle.cs
- XLinq.cs
- DataControlFieldCollection.cs
- BoundColumn.cs
- FileSystemEventArgs.cs
- ToolboxItemCollection.cs
- FormViewRow.cs
- ProxyHwnd.cs
- StructuredProperty.cs
- QuadraticBezierSegment.cs
- TextSyndicationContentKindHelper.cs
- StringUtil.cs
- PackageFilter.cs
- IntegrationExceptionEventArgs.cs
- wpf-etw.cs
- HeaderedItemsControl.cs
- GuidelineSet.cs
- BitmapCache.cs
- Evidence.cs
- DecimalConverter.cs
- CustomTypeDescriptor.cs
- RegexReplacement.cs
- ProxyAttribute.cs
- CompensableActivity.cs
- RequestCachePolicyConverter.cs
- FlowDocumentPageViewerAutomationPeer.cs
- InkCollectionBehavior.cs
- TextEditorLists.cs
- BezierSegment.cs
- ResourceReferenceKeyNotFoundException.cs
- ElementNotAvailableException.cs
- TemplateInstanceAttribute.cs
- FunctionImportMapping.ReturnTypeRenameMapping.cs
- BitmapEffectDrawingContextState.cs
- SelectedGridItemChangedEvent.cs
- CLSCompliantAttribute.cs
- TableLayoutSettingsTypeConverter.cs
- SafeRightsManagementPubHandle.cs
- webbrowsersite.cs
- UnsafeNativeMethods.cs
- ConfigurationCollectionAttribute.cs
- VisualStyleInformation.cs
- _CookieModule.cs