Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ // 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
- MultiViewDesigner.cs
- ProtocolsSection.cs
- ToolStripDropDownClosedEventArgs.cs
- Base64Encoder.cs
- PerformanceCounter.cs
- PrimarySelectionGlyph.cs
- NetworkAddressChange.cs
- ShaderRenderModeValidation.cs
- ImageButton.cs
- PocoPropertyAccessorStrategy.cs
- CodeDirectionExpression.cs
- PrivateFontCollection.cs
- ResXResourceSet.cs
- MutexSecurity.cs
- AppSettingsExpressionEditor.cs
- initElementDictionary.cs
- PackageRelationshipCollection.cs
- BaseConfigurationRecord.cs
- CodeSpit.cs
- TabControl.cs
- WinInetCache.cs
- ObjectNavigationPropertyMapping.cs
- UpdatableGenericsFeature.cs
- TemplatePartAttribute.cs
- HyperLinkColumn.cs
- AmbientLight.cs
- DefinitionBase.cs
- QueryableDataSourceEditData.cs
- QueryExpr.cs
- AdapterDictionary.cs
- ConfigurationValues.cs
- HiddenField.cs
- updateconfighost.cs
- HttpStaticObjectsCollectionBase.cs
- DeflateStreamAsyncResult.cs
- AddDataControlFieldDialog.cs
- ReachPageContentCollectionSerializerAsync.cs
- ApplicationActivator.cs
- SerialReceived.cs
- ArrayElementGridEntry.cs
- BooleanStorage.cs
- GradientStop.cs
- HtmlInputButton.cs
- ServiceDebugElement.cs
- ConnectionManagementElementCollection.cs
- BeginEvent.cs
- ResourceKey.cs
- FeatureSupport.cs
- BasicDesignerLoader.cs
- SpecularMaterial.cs
- validationstate.cs
- DisplayNameAttribute.cs
- RequestStatusBarUpdateEventArgs.cs
- RawStylusSystemGestureInputReport.cs
- DataServiceQueryException.cs
- ErrorWrapper.cs
- AppSettingsReader.cs
- MenuBase.cs
- AssemblyBuilderData.cs
- ApplicationDirectory.cs
- WindowsToolbarItemAsMenuItem.cs
- DesignBindingPicker.cs
- SessionEndingCancelEventArgs.cs
- SHA384Managed.cs
- PageBuildProvider.cs
- ColorMap.cs
- OutputCacheProfileCollection.cs
- LayoutEditorPart.cs
- Evidence.cs
- WebPartConnectionsDisconnectVerb.cs
- ConfigUtil.cs
- GlobalProxySelection.cs
- WindowsListViewGroupHelper.cs
- CharAnimationUsingKeyFrames.cs
- BuildProvider.cs
- DateTime.cs
- TransformedBitmap.cs
- ProxyManager.cs
- ClientSettingsStore.cs
- PolicyManager.cs
- CopyAction.cs
- ListDictionary.cs
- UnmanagedHandle.cs
- DetailsViewPageEventArgs.cs
- SqlDataSourceSelectingEventArgs.cs
- ColorMap.cs
- ClientSideQueueItem.cs
- UnsafeNetInfoNativeMethods.cs
- TransformerInfo.cs
- Button.cs
- ClientScriptManager.cs
- TypeDescriptionProviderAttribute.cs
- SqlDataSourceCommandEventArgs.cs
- Completion.cs
- ValueTable.cs
- CodeSubDirectory.cs
- TextTreeRootTextBlock.cs
- ImageConverter.cs
- ExpressionList.cs
- IncrementalCompileAnalyzer.cs