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
- PhysicalFontFamily.cs
- Semaphore.cs
- BindingBase.cs
- InfoCardRSACryptoProvider.cs
- ListBindingConverter.cs
- TraceRecords.cs
- HttpListener.cs
- WhitespaceSignificantCollectionAttribute.cs
- GrowingArray.cs
- CodeMethodReturnStatement.cs
- TextRange.cs
- XmlnsDictionary.cs
- Number.cs
- FunctionParameter.cs
- SqlConnectionFactory.cs
- Underline.cs
- CodeSnippetCompileUnit.cs
- MetadataPropertyvalue.cs
- UITypeEditors.cs
- ContextProperty.cs
- ExceptionUtil.cs
- RuleSettingsCollection.cs
- SingleConverter.cs
- AsymmetricKeyExchangeDeformatter.cs
- Visitor.cs
- Visual.cs
- CollectionContainer.cs
- IconHelper.cs
- HttpCacheVary.cs
- HandledMouseEvent.cs
- OracleInfoMessageEventArgs.cs
- MembershipUser.cs
- PageOutputQuality.cs
- MetafileHeader.cs
- FlowDocumentPage.cs
- DataViewManager.cs
- TransformConverter.cs
- WindowsSolidBrush.cs
- TryCatch.cs
- StylusPointCollection.cs
- Touch.cs
- PtsHelper.cs
- PrinterSettings.cs
- ViewgenContext.cs
- AmbiguousMatchException.cs
- CompilationUtil.cs
- CornerRadius.cs
- ToolStripSplitStackLayout.cs
- HwndSubclass.cs
- DataGridViewCellLinkedList.cs
- ReachPageContentSerializerAsync.cs
- CancelEventArgs.cs
- ColumnMapTranslator.cs
- DependencyObject.cs
- AuthorizationSection.cs
- DecimalStorage.cs
- JavaScriptString.cs
- WebDescriptionAttribute.cs
- XmlCharType.cs
- OutputCacheSettingsSection.cs
- HttpResponseHeader.cs
- UpDownBaseDesigner.cs
- AsymmetricKeyExchangeDeformatter.cs
- PackUriHelper.cs
- JulianCalendar.cs
- Util.cs
- EditorZoneBase.cs
- KeyFrames.cs
- RegexMatchCollection.cs
- IndexedGlyphRun.cs
- FontWeights.cs
- ProfileGroupSettings.cs
- HtmlFormParameterWriter.cs
- MetadataPropertyAttribute.cs
- TextTreeUndo.cs
- Debug.cs
- AssociatedControlConverter.cs
- Inline.cs
- ColorConvertedBitmap.cs
- ScrollEvent.cs
- TreeNodeCollection.cs
- UnsafeNativeMethods.cs
- XPathItem.cs
- StyleSheetDesigner.cs
- ArrangedElement.cs
- AddressHeader.cs
- QilReplaceVisitor.cs
- SqlProfileProvider.cs
- MenuEventArgs.cs
- StaticSiteMapProvider.cs
- ApplicationDirectoryMembershipCondition.cs
- SecurityRuntime.cs
- XmlSchemaAny.cs
- InternalPermissions.cs
- DropTarget.cs
- TargetConverter.cs
- ClassDataContract.cs
- Helper.cs
- SafeNativeMethods.cs
- EncryptedData.cs