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
- ValidationErrorCollection.cs
- PropertyNames.cs
- _CommandStream.cs
- XmlBaseWriter.cs
- ProfilePropertySettings.cs
- PolicyDesigner.cs
- ComponentEditorForm.cs
- RuntimeHandles.cs
- ColumnCollection.cs
- SamlAuthorizationDecisionStatement.cs
- ConfigurationSectionGroupCollection.cs
- LinqDataSourceSelectEventArgs.cs
- UInt16Converter.cs
- WeakEventTable.cs
- TableCell.cs
- PasswordTextContainer.cs
- Propagator.Evaluator.cs
- InheritanceContextHelper.cs
- ReadOnlyObservableCollection.cs
- RowToFieldTransformer.cs
- MenuItemCollection.cs
- _RequestLifetimeSetter.cs
- SoapSchemaMember.cs
- UiaCoreApi.cs
- datacache.cs
- PriorityQueue.cs
- ByteConverter.cs
- StandardCommands.cs
- MexBindingBindingCollectionElement.cs
- OdbcError.cs
- XAMLParseException.cs
- ParserStreamGeometryContext.cs
- Selection.cs
- TrackingParameters.cs
- SectionXmlInfo.cs
- SingleResultAttribute.cs
- BaseTransportHeaders.cs
- SQLBytes.cs
- IIS7UserPrincipal.cs
- MetadataSection.cs
- ProjectedSlot.cs
- ControlTemplate.cs
- CustomErrorCollection.cs
- ChineseLunisolarCalendar.cs
- HyperLinkStyle.cs
- ShaderEffect.cs
- RegisteredHiddenField.cs
- EventSetterHandlerConverter.cs
- StrokeDescriptor.cs
- MappedMetaModel.cs
- ClientApiGenerator.cs
- ApplicationManager.cs
- InternalControlCollection.cs
- Regex.cs
- DrawListViewItemEventArgs.cs
- OrderedDictionaryStateHelper.cs
- ConstNode.cs
- DllNotFoundException.cs
- RoutingService.cs
- ShapingEngine.cs
- BitmapCache.cs
- BindingGroup.cs
- EntityDataSourceStatementEditor.cs
- CompiledRegexRunnerFactory.cs
- GeometryDrawing.cs
- BasicExpressionVisitor.cs
- AspNetCacheProfileAttribute.cs
- SQLDoubleStorage.cs
- XamlSerializerUtil.cs
- RequestCacheEntry.cs
- HebrewNumber.cs
- InheritanceContextHelper.cs
- DataGridPagingPage.cs
- PersistenceTypeAttribute.cs
- GACIdentityPermission.cs
- PageContentAsyncResult.cs
- DeflateStreamAsyncResult.cs
- LayoutTable.cs
- UnregisterInfo.cs
- _Connection.cs
- WindowsToolbarAsMenu.cs
- ArgumentException.cs
- AutoResetEvent.cs
- wgx_render.cs
- DefaultCommandConverter.cs
- XPathMultyIterator.cs
- CompilerLocalReference.cs
- CfgArc.cs
- ExceptionCollection.cs
- SqlTriggerContext.cs
- BitmapEffectInputData.cs
- StylusTip.cs
- SqlDataSourceWizardForm.cs
- BookmarkNameHelper.cs
- SpotLight.cs
- QuaternionAnimation.cs
- StateMachineTimers.cs
- GroupQuery.cs
- HttpFileCollection.cs