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
- TypeConverterAttribute.cs
- HttpCookiesSection.cs
- SignalGate.cs
- ClockController.cs
- SqlDataSourceStatusEventArgs.cs
- TreeViewDataItemAutomationPeer.cs
- VersionedStreamOwner.cs
- AuthorizationRuleCollection.cs
- XmlQualifiedNameTest.cs
- URLIdentityPermission.cs
- Stack.cs
- EditorBrowsableAttribute.cs
- SpoolingTaskBase.cs
- GetPageCompletedEventArgs.cs
- MgmtConfigurationRecord.cs
- ExpressionLexer.cs
- EditingMode.cs
- RegisteredScript.cs
- DesignerLoader.cs
- Restrictions.cs
- PasswordRecovery.cs
- Stylus.cs
- HatchBrush.cs
- HttpPostClientProtocol.cs
- RegistrySecurity.cs
- NoClickablePointException.cs
- Bits.cs
- SnapLine.cs
- ClockController.cs
- UnsafeMethods.cs
- TableStyle.cs
- RegexCaptureCollection.cs
- SortDescription.cs
- MasterPage.cs
- ISAPIWorkerRequest.cs
- SspiWrapper.cs
- RegisteredArrayDeclaration.cs
- SelectionUIService.cs
- StandardToolWindows.cs
- OutputCacheSettingsSection.cs
- InstanceCreationEditor.cs
- ByteStream.cs
- Point3DCollection.cs
- WindowsListViewScroll.cs
- FileFormatException.cs
- Timer.cs
- Privilege.cs
- ObjectConverter.cs
- Rule.cs
- PaintValueEventArgs.cs
- ConfigurationManagerHelperFactory.cs
- ManagedWndProcTracker.cs
- OdbcCommandBuilder.cs
- unsafeIndexingFilterStream.cs
- KeyboardEventArgs.cs
- ToolStripDropDownItemDesigner.cs
- OperationCanceledException.cs
- ProfilePropertyNameValidator.cs
- CodeArrayIndexerExpression.cs
- DetailsViewPageEventArgs.cs
- mda.cs
- DataContract.cs
- ScriptResourceInfo.cs
- NumericUpDownAccelerationCollection.cs
- BinarySerializer.cs
- PerformanceCountersElement.cs
- HwndProxyElementProvider.cs
- CqlParserHelpers.cs
- TemplateBindingExpression.cs
- EditorAttribute.cs
- GroupQuery.cs
- EmptyImpersonationContext.cs
- ResizeGrip.cs
- AbstractSvcMapFileLoader.cs
- StorageRoot.cs
- DataSourceCache.cs
- KeyNotFoundException.cs
- RuntimeEnvironment.cs
- ConstraintConverter.cs
- ZipIOCentralDirectoryFileHeader.cs
- HtmlTableCellCollection.cs
- ParserHooks.cs
- BitmapPalettes.cs
- SqlDelegatedTransaction.cs
- CompiledXpathExpr.cs
- EntityContainerEmitter.cs
- WebPartVerbsEventArgs.cs
- InputEventArgs.cs
- ObjectDataSourceFilteringEventArgs.cs
- ToolStripItemImageRenderEventArgs.cs
- XmlAnyElementAttribute.cs
- OdbcParameterCollection.cs
- DrawingState.cs
- Signature.cs
- LogSwitch.cs
- XmlValidatingReader.cs
- Win32MouseDevice.cs
- HttpCookie.cs
- SchemaTableOptionalColumn.cs
- VirtualizedItemPattern.cs