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
- HMACSHA256.cs
- FilteredXmlReader.cs
- HyperLinkField.cs
- CellTreeNodeVisitors.cs
- Track.cs
- PathFigure.cs
- KeyValueConfigurationCollection.cs
- CodeSnippetExpression.cs
- StringResourceManager.cs
- Property.cs
- InlineCollection.cs
- FrameworkRichTextComposition.cs
- ToolStripTextBox.cs
- XmlNullResolver.cs
- TraceRecord.cs
- Size.cs
- ProcessHost.cs
- MenuItemStyle.cs
- SqlStatistics.cs
- DebugView.cs
- Function.cs
- ValidationErrorCollection.cs
- ObjectListGeneralPage.cs
- Clock.cs
- LabelLiteral.cs
- RoutedCommand.cs
- DeviceOverridableAttribute.cs
- MouseGestureValueSerializer.cs
- XsltSettings.cs
- EntitySetBase.cs
- StateItem.cs
- DeadCharTextComposition.cs
- ItemsControl.cs
- MetadataItemCollectionFactory.cs
- SelectingProviderEventArgs.cs
- CodeCatchClauseCollection.cs
- WebEventCodes.cs
- SecurityElement.cs
- Int64AnimationBase.cs
- XmlSchemaAnnotation.cs
- RolePrincipal.cs
- EventPropertyMap.cs
- VisualTreeHelper.cs
- ClientTargetCollection.cs
- PropertyNames.cs
- RequiredAttributeAttribute.cs
- SelectedCellsCollection.cs
- PathFigureCollection.cs
- TagPrefixCollection.cs
- DBDataPermissionAttribute.cs
- DetailsViewPageEventArgs.cs
- XPathExpr.cs
- cookie.cs
- NgenServicingAttributes.cs
- RuleSetReference.cs
- IncrementalHitTester.cs
- QueryTaskGroupState.cs
- _UriSyntax.cs
- Descriptor.cs
- PeerTransportListenAddressValidator.cs
- ConfigXmlWhitespace.cs
- RenderData.cs
- ObjectDataSourceDisposingEventArgs.cs
- BulletChrome.cs
- AnimationTimeline.cs
- UriSectionReader.cs
- TextBoxAutomationPeer.cs
- SchemaLookupTable.cs
- AmbiguousMatchException.cs
- IisTraceListener.cs
- BezierSegment.cs
- SqlProviderUtilities.cs
- DesignTimeParseData.cs
- QilInvokeLateBound.cs
- OneOf.cs
- Logging.cs
- FieldAccessException.cs
- TextServicesHost.cs
- FacetChecker.cs
- ObsoleteAttribute.cs
- SubMenuStyle.cs
- HttpCacheVaryByContentEncodings.cs
- ConnectionConsumerAttribute.cs
- ProcessHostMapPath.cs
- PenContext.cs
- ToolStripArrowRenderEventArgs.cs
- XmlTextReaderImpl.cs
- UserControl.cs
- Cursor.cs
- DrawingAttributesDefaultValueFactory.cs
- XmlSchemaExternal.cs
- OleDbPropertySetGuid.cs
- EdmMember.cs
- FormViewPageEventArgs.cs
- RtfFormatStack.cs
- EntityAdapter.cs
- XmlChildNodes.cs
- TimelineCollection.cs
- HMAC.cs
- RelatedEnd.cs