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
- TargetControlTypeAttribute.cs
- BitmapEffectDrawingContextState.cs
- NativeMethods.cs
- ObjectStorage.cs
- Message.cs
- EncryptRequest.cs
- ContextBase.cs
- ToolStripDropDownMenu.cs
- RenamedEventArgs.cs
- AsyncMethodInvoker.cs
- DataGridTextColumn.cs
- TextBoxBase.cs
- CollectionViewGroupRoot.cs
- DbConnectionPoolOptions.cs
- TextShapeableCharacters.cs
- MessageDecoder.cs
- ProfileService.cs
- HighlightComponent.cs
- SafeThemeHandle.cs
- InvalidAsynchronousStateException.cs
- BamlMapTable.cs
- LinqDataSourceHelper.cs
- DataConnectionHelper.cs
- SchemaEntity.cs
- CodeDefaultValueExpression.cs
- DoubleMinMaxAggregationOperator.cs
- SpanIndex.cs
- CapabilitiesAssignment.cs
- TextEditorTyping.cs
- LocalBuilder.cs
- EndPoint.cs
- FrameworkContentElement.cs
- ClientUrlResolverWrapper.cs
- ProbeMatchesMessage11.cs
- PriorityQueue.cs
- EncryptedPackageFilter.cs
- DefaultPropertyAttribute.cs
- ScrollPattern.cs
- SafeReversePInvokeHandle.cs
- MetadataSource.cs
- IgnoreDataMemberAttribute.cs
- InfoCardUIAgent.cs
- FormsAuthentication.cs
- Int64KeyFrameCollection.cs
- RequestReplyCorrelator.cs
- COM2DataTypeToManagedDataTypeConverter.cs
- SystemException.cs
- StorageEntitySetMapping.cs
- PaintValueEventArgs.cs
- SynchronizedDispatch.cs
- Random.cs
- ValueOfAction.cs
- SamlSubject.cs
- NonParentingControl.cs
- PeerNearMe.cs
- arc.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- Choices.cs
- SessionState.cs
- SQLDouble.cs
- RoutedPropertyChangedEventArgs.cs
- SQLGuidStorage.cs
- IncrementalReadDecoders.cs
- ExpressionBuilderContext.cs
- SaveFileDialog.cs
- JoinSymbol.cs
- WSSecurityOneDotZeroSendSecurityHeader.cs
- RelationshipConverter.cs
- TextModifier.cs
- Processor.cs
- MarkupCompiler.cs
- RegionIterator.cs
- login.cs
- TextRunCacheImp.cs
- AxisAngleRotation3D.cs
- DataErrorValidationRule.cs
- Char.cs
- CodePageUtils.cs
- MailMessage.cs
- WebBrowserSiteBase.cs
- MetroSerializationManager.cs
- AuthorizationContext.cs
- RsaSecurityTokenAuthenticator.cs
- SimpleTypeResolver.cs
- MDIWindowDialog.cs
- HostingPreferredMapPath.cs
- HttpHeaderCollection.cs
- SecurityPermission.cs
- OleServicesContext.cs
- CalendarDay.cs
- PersonalizationStateQuery.cs
- SharedStream.cs
- VarInfo.cs
- ContextDataSource.cs
- HttpListenerRequestTraceRecord.cs
- BoundColumn.cs
- PermissionSetTriple.cs
- ResXDataNode.cs
- MSAAWinEventWrap.cs
- NavigationEventArgs.cs