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
- WebExceptionStatus.cs
- CustomError.cs
- ProfileInfo.cs
- QilExpression.cs
- Expr.cs
- UserPersonalizationStateInfo.cs
- SourceLocationProvider.cs
- StyleHelper.cs
- Decorator.cs
- DataGridViewComboBoxColumnDesigner.cs
- WindowPatternIdentifiers.cs
- RotateTransform.cs
- ActivityInfo.cs
- SudsParser.cs
- RightsManagementInformation.cs
- MenuItem.cs
- ToolStripPanel.cs
- DataSourceSelectArguments.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- RtfToXamlReader.cs
- TypeReference.cs
- DispatcherTimer.cs
- TypeConverterAttribute.cs
- Track.cs
- Pkcs7Recipient.cs
- HtmlPageAdapter.cs
- ContainsRowNumberChecker.cs
- Semaphore.cs
- RewritingSimplifier.cs
- AccessText.cs
- DivideByZeroException.cs
- Int32RectConverter.cs
- DeploymentSection.cs
- WebRequestModuleElementCollection.cs
- SimpleHandlerFactory.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- BaseServiceProvider.cs
- querybuilder.cs
- XmlDataDocument.cs
- Document.cs
- CustomPopupPlacement.cs
- ArgumentOutOfRangeException.cs
- DocumentViewer.cs
- WebPartVerb.cs
- HtmlTableRow.cs
- PolicyValidationException.cs
- PrintPreviewDialog.cs
- DictionarySectionHandler.cs
- TailCallAnalyzer.cs
- assemblycache.cs
- CaretElement.cs
- DbCommandTree.cs
- ListManagerBindingsCollection.cs
- VBCodeProvider.cs
- ApplicationBuildProvider.cs
- AuthStoreRoleProvider.cs
- StreamGeometry.cs
- Boolean.cs
- WeakHashtable.cs
- ConstructorArgumentAttribute.cs
- Transform.cs
- Subtree.cs
- TemplateBuilder.cs
- webbrowsersite.cs
- TextRangeBase.cs
- TraceUtility.cs
- MemoryRecordBuffer.cs
- BodyGlyph.cs
- ProxyGenerationError.cs
- CalendarDateChangedEventArgs.cs
- ValidationRuleCollection.cs
- Stylesheet.cs
- RepeaterCommandEventArgs.cs
- PerformanceCounterPermissionEntry.cs
- LocalIdKeyIdentifierClause.cs
- ComponentEditorForm.cs
- XPathAncestorQuery.cs
- ClosableStream.cs
- SiteMapNodeItemEventArgs.cs
- AncestorChangedEventArgs.cs
- DataFormats.cs
- StoryFragments.cs
- TextAction.cs
- XmlMembersMapping.cs
- SqlUDTStorage.cs
- QilXmlReader.cs
- CodeBlockBuilder.cs
- ObjectQueryExecutionPlan.cs
- Errors.cs
- CounterCreationDataCollection.cs
- StaticExtension.cs
- BindingCompleteEventArgs.cs
- StandardBindingReliableSessionElement.cs
- PerfCounterSection.cs
- PageBuildProvider.cs
- UserPreferenceChangedEventArgs.cs
- GenericIdentity.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- SiblingIterators.cs
- AutoResetEvent.cs