gpt4 book ai didi

azure - 在 Azure 应用服务上运行的 WCF 服务的 SSL 设置存在问题

转载 作者:行者123 更新时间:2023-12-03 02:34:48 25 4
gpt4 key购买 nike

我目前正在开发一个 wcf webservice(.NET 4.7.2),它接受来自不同来源的肥皂消息。其中一个来源要求我们使用自定义颁发机构 (CA) 创建一个由证书保护的端点。

为此,我创建了一个新的 .svc 文件,该文件使用以下绑定(bind)进行初始化并导入证书。可在 Azure Web 应用程序中访问此证书:

public static void Configure(ServiceConfiguration config)
{
// Enable "Add Service Reference" support
config.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpsGetEnabled = true, HttpGetEnabled = false }); //mex
//setup support for certficate security
var binding = new WSHttpBinding
{
Name = "CertificateBinding",
ReaderQuotas = { MaxArrayLength = int.MaxValue },
MaxReceivedMessageSize = int.MaxValue,
Security = new WSHttpSecurity
{
Mode = SecurityMode.Transport,
Transport = new HttpTransportSecurity
{
ClientCredentialType = HttpClientCredentialType.Certificate
},
},
};

config.EnableProtocol(binding);

config.Credentials.ServiceCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindByThumbprint, "Thumbprint inserted here");

config.Description.Behaviors.Add(new ServiceDebugBehavior { IncludeExceptionDetailInFaults = true });
}

为了为此端点启用证书身份验证,我将以下内容添加到 web.config 中;

 <location path="IntegrationWebService_CertificateSecurity.svc">
<system.webServer>
<httpErrors errorMode="Detailed"></httpErrors>
<security>
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
</security>
</system.webServer>
</location>

我对此进行了测试,这一切在本地运行良好,但是当部署到 azure Web 应用程序时,它显示 500 错误。我似乎无法弄清楚这个 500 错误的原因。其他 .svc 文件保持正常工作。

我尝试过的;

  • 添加 ELMAH;没有记录任何异常。

  • SslSettings 的多个配置均无效,但仅添加“SslRequireCert”将错误更改为“服务“SslRequireCert”的 SSL 设置与 IIS“None”的 SSL 设置不匹配”。我不再追求这个,因为据我所知 SslNegotiateCert 部分是必需的。

  • 尝试添加一个 applicationHost.xdt 文件来转换 overrideModeDefault 以允许这样的覆盖,但没有成功:

      <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <configSections>
    <sectionGroup name="system.webServer" xdt:Locator="Match(name)">
    <sectionGroup name="security" xdt:Locator="Match(name)">
    <section name="access" overrideModeDefault="Allow" xdt:Locator="Match(name)" xdt:Transform="SetAttributes(overrideModeDefault)" />
    </sectionGroup>
    </sectionGroup>
    </configSections>
    </configuration>

难道 Azure 不允许在 SslFlags 中使用自定义值吗?

最佳答案

显然,对于 Azure,您不能使用 System.ServiceModel 要求客户端证书。因此,首先您可以关闭需要客户端证书的部分。使用 CustomBinding 执行此操作如下所示:

var httpsBE = new HttpsTransportBindingElement();
httpsBE.RequireClientCertificate = false;
httpsBE.AuthenticationScheme = AuthenticationSchemes.Anonymous;

转到您的应用服务应用设置并从那里要求客户端证书; Azure incoming client certificates appsetting

然后,Azure 所做的是将证书从原始请求移动到 X-ARR-ClientCert header 。这可以在像这样的网络服务中访问;

var certHeader = WebOperationContext.Current.IncomingRequest.Headers["X-ARR-ClientCert"];

并将其转换为 X509Certificate2:

var clientCertBytes = Convert.FromBase64String(certHeader);
var x509Certificate2 = new X509Certificate2(clientCertBytes);

然后您必须运行自己的证书验证。

关于azure - 在 Azure 应用服务上运行的 WCF 服务的 SSL 设置存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63618536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com