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
- SessionStateContainer.cs
- GraphicsPathIterator.cs
- Item.cs
- XmlSerializer.cs
- ArrayElementGridEntry.cs
- UpdateRecord.cs
- ChannelManager.cs
- TreeNodeBinding.cs
- OleDbInfoMessageEvent.cs
- ResourceWriter.cs
- FragmentQuery.cs
- CodeExpressionCollection.cs
- RecognizedWordUnit.cs
- NativeMethods.cs
- ArrangedElementCollection.cs
- BitStack.cs
- SQLSingle.cs
- BinaryReader.cs
- ContentFilePart.cs
- SchemaImporterExtensionElement.cs
- XmlCharCheckingWriter.cs
- SqlStatistics.cs
- DataSourceProvider.cs
- SynchronizedDispatch.cs
- FileDialog_Vista.cs
- EntityDataSourceDataSelection.cs
- XmlLangPropertyAttribute.cs
- QilInvokeLateBound.cs
- BufferedStream2.cs
- GlyphRunDrawing.cs
- CodeMemberMethod.cs
- WebPartMenuStyle.cs
- TextEditorTables.cs
- Query.cs
- ResourceLoader.cs
- WindowsToolbarItemAsMenuItem.cs
- DataGridViewCellConverter.cs
- RowToFieldTransformer.cs
- CodeSnippetExpression.cs
- TrustLevelCollection.cs
- XmlCharType.cs
- SystemIPAddressInformation.cs
- WebPartDisplayModeCollection.cs
- CqlParser.cs
- Span.cs
- ConsoleKeyInfo.cs
- DragDrop.cs
- RegexMatch.cs
- CompositeKey.cs
- AtlasWeb.Designer.cs
- EllipticalNodeOperations.cs
- VectorCollectionConverter.cs
- DefaultSerializationProviderAttribute.cs
- FixedPageProcessor.cs
- Cursor.cs
- MouseGestureConverter.cs
- Walker.cs
- ReferenceService.cs
- DataSourceDescriptorCollection.cs
- RuntimeWrappedException.cs
- SerializationInfo.cs
- HScrollBar.cs
- ManagedIStream.cs
- ApplicationProxyInternal.cs
- TransformerInfo.cs
- HiddenFieldPageStatePersister.cs
- EnumerableValidator.cs
- Stack.cs
- BinaryUtilClasses.cs
- pingexception.cs
- AudioFormatConverter.cs
- CacheRequest.cs
- SqlRecordBuffer.cs
- EnumerableRowCollectionExtensions.cs
- Internal.cs
- LocalServiceSecuritySettings.cs
- FixedMaxHeap.cs
- DesignOnlyAttribute.cs
- PointUtil.cs
- DeviceContext2.cs
- PagesSection.cs
- ObjectView.cs
- WebConvert.cs
- SynchronizedDispatch.cs
- SByteConverter.cs
- COM2TypeInfoProcessor.cs
- ConcurrentStack.cs
- SystemColors.cs
- QilStrConcatenator.cs
- HtmlElementErrorEventArgs.cs
- ConfigurationCollectionAttribute.cs
- PropertyTabAttribute.cs
- TextServicesLoader.cs
- HttpValueCollection.cs
- RichTextBoxContextMenu.cs
- SkewTransform.cs
- FontCollection.cs
- NativeRightsManagementAPIsStructures.cs
- BaseServiceProvider.cs
- _SSPISessionCache.cs