gpt4 book ai didi

certificate - 如何为WCF传输安全设置客户端和服务器证书?

转载 作者:行者123 更新时间:2023-12-02 02:20:06 26 4
gpt4 key购买 nike

我的情况:我在Amazon EC2服务器上托管了一个面向公众的Web应用程序。我在防火墙后面有一个自托管的数据库服务器。我有带有网络服务的自托管Web服务服务器,用于数据访问。我只想允许我批准的应用程序(我自己住在云中)访问服务,并且我不希望任何数据以明文形式传递。

从我所看到的看得出来,所有有关MSDN的文章都一目了然,而且令人费解。我需要的安全性类型是:
使用 wsHttpBinding 使用传输安全模式证书 clientCredentialType。第一个问题,我是否可以假设这一点?那会给我足够的安全性吗?这不是B2B或类似的东西。但是,它是跨域的,我只想确保我可以信任 call 者。我的服务在特定用户拥有的AppPool中运行,因此我可以集成安全性访问数据库。我需要确保只有我批准的服务调用者才能进入。我不需要加密消息,而我已经不相信SSL。

所有可能的情况都使我很难知道这是否是我想要的。但是假设是下一个问题,我该如何设置证书?我目前在服务器上有一个证书,并且只能使用Https访问。 (安全模式=“Transport”,clientCredentialType =“None”)。但是对于我一生,我无法弄清楚将clientCredentialType更改为Certificate并使其正常工作所需要做的事情。

  • 我从服务器给客户端什么?它在哪里?
  • 我如何从客户端提供服务器,它在哪里?
  • 如果我有多个客户端(一个Web场),我是否必须为所有客户端都拥有不同的客户端证书,或者它们可以共享我的服务器接受的一个证书?

  • 我阅读的所有开发文章都说Cert设置是一种管理工具,不在本文讨论范围之内。好吧,WCF的东西很简单,这正是我需要帮助的原始证书东西,而且我还没有找到有用的文章。那些接近的人展示了如何使用makecert.exe进行操作,并说在生产环境中会有所不同,但是然后不说在生产环境中如何做。

    我确定我的挫败感正在显现,对此感到抱歉。但是,对于如何执行WCF中似乎很常见的安全方案没有明确的描述,这确实没有任何意义。

    任何和所有帮助,

    最佳答案

    简短答案

    我需要的安全性类型是:传输安全模式
    使用wsHttpBinding证书clientCredentialType。第一个问题
    我猜对了吗?

    是。假设您不使用WCF流功能,则消息安全性也将起作用,但是通过传输安全性,您可以受益于硬件加速。

    如何设置证书?

    请参阅下面的详细答案。

    我从服务器给客户端什么?它在哪里?
    如果我有多个客户(网络农场),我是否必须有其他客户
    所有客户端证书,或者他们可以共享我的服务器的一个证书
    接受吗?

    您需要3个证书:

  • 客户端证书(所有客户端都相同)。
  • 服务器证书。
  • 证书颁发机构(CA)证书,客户端和服务器证书由该证书颁发机构提供
    被发行。

  • 客户需要:
  • 安装在“个人证书”存储中的客户端证书。
  • 安装在“受信任的根证书颁发机构”存储中的CA证书。

  • 我从客户端给服务器什么?去哪里?

    服务器需要:
  • 安装在“个人证书”存储中的服务器证书。
  • 安装在“受信任的根证书颁发机构”存储中的CA证书。
  • 安装在“受信任的人”存储区中的客户端证书。


  • 详细答案

    在这种情况下(Web场与自托管Web服务之间的通信),您拥有客户端和服务器计算机。不需要第三方颁发的证书(您相信自己,对吗?)。这意味着您可以安全地使用自制证书。

    这是一个快速指南,希望对您(或其他人)有所帮助。如果您已经按照问题的建议拥有证书,请随时跳过步骤I。此外,您可能已经购买了第三方颁发的证书,在这种情况下,可能已在其上安装了根证书颁发机构(VeriSign,Microsoft等)证书您的客户端和服务器计算机。

    一,创建证书

    如本 msdn article中所述,请使用 makecert生成3个证书:
  • 根证书颁发机构证书,我们将其称为 MyRootCA 及其撤销列表。
  • 服务器SSL证书。该名称必须是您的Web场客户端将用于调用Web服务的域名。例如,如果您的客户使用以下URL:https://mywebserver.myprivatedomain.com/service1.svc,则您的证书CN(通用名称)将为 mywebserver.myprivatedomain.com
  • 客户端X.509证书,我们称其为 MyAmazonClient

  • 这是完成这三个步骤的简单批处理:
    REM 1: MyRootCA
    makecert -n "CN=MyRootCA" -r -sv "MyRootCA.pvk" "MyRootCA.cer"
    makecert -crl -n "CN=MyRootCA" -r -sv "MyRootCA.pvk" "MyRootCA.crl"

    REM 2: mywebserver.myprivatedomain.com
    makecert -sk "mywebserver.myprivatedomain.com" -iv "MyRootCA.pvk" -n "CN=mywebserver.myprivatedomain.com" -ic "MyRootCA.cer" -sr LocalMachine -ss My -sky exchange -pe

    REM 3: MyAmazonClient
    makecert -sk "MyAmazonClient" -iv "MyRootCA.pvk" -n "CN=MyAmazonClient" -ic "MyRootCA.cer" -sr LocalMachine -ss My -sky signature -pe

    该批处理将在当前文件夹中创建3个文件:
  • MyRootCA.cer :包含根CA证书的 public 密钥。
  • MyRootCA.crl :包含证书吊销列表。
  • MyRootCA.pvk :包含根CA证书的私钥。

  • 其他2个证书(客户端和服务器)安装在本地计算机证书存储中。

    使用 Certificates MMC Snap-in,将它们导出到.pfx文件中:
  • 找到LocalMachine>我的>证书。
  • 右键单击 MyAmazonClient >所有任务>导出。
  • 右键单击 mywebserver.myprivatedomain.com >所有任务>导出。

  • 二。安装服务器证书

    在服务器计算机(公开Web服务的服务器计算机)上,复制以下文件:
  • MyRootCA.cer
  • MyRootCA.crl
  • MyAmazonClient.pfx
  • mywebserver.myprivatedomain.com.pfx

  • 使用服务器计算机上的“证书MMC”管理单元,将证书安装在以下位置:
  • MyRootCA.cer MyRootCA.crl 转换成Local Computer > Trusted Root Certification Authorities > Certificates
  • MyAmazonClient.pfx 转换成Local Computer > Trusted People > Certificates
  • mywebserver.myprivatedomain.com.pfx 转换成Local Computer > Personal > Certificates

  • 授予IIS AppPool访问mywebserver.myprivatedomain.com证书的私钥的权限。在MMC证书管理单元中,右键单击mywebserver.myprivatedomain.com>所有任务>管理私钥...,然后添加运行AppPool的身份。请注意,与使用ApplicationPoolIdentity时(默认情况下)相比,标识名称为 IIS AppPool\YourAppPoolNameHere

    三,配置IIS以支持SSL

    使用IIS管理器,找到您的网站,并使用 mywebserver.myprivatedomain.com证书添加https绑定(bind)。参见 Step 4: Configure Your Temporary Service Certificate in IIS to Support SSL

    IV。配置服务(web.config)
      <system.serviceModel>
    <protocolMapping>
    <add scheme="https" binding="wsHttpBinding" />
    </protocolMapping>
    <bindings>
    <wsHttpBinding>
    <!-- configure wsHttp binding with Transport security mode and clientCredentialType as Certificate -->
    <binding>
    <security mode="Transport">
    <transport clientCredentialType="Certificate"/>
    </security>
    </binding>
    </wsHttpBinding>
    </bindings>
    </system.serviceModel>

    V.安装客户端证书

    在每台客户端计算机(Web场)上,复制以下文件:
  • MyRootCA.cer
  • MyRootCA.crl
  • MyAmazonClient.pfx

  • 使用客户端计算机上的证书MMC管理单元,将证书安装在以下位置:
  • MyRootCA.cer MyRootCA.crl 转换成Local Computer > Trusted Root Certification Authorities > Certificates
  • MyAmazonClient.pfx 转换成Local Computer > Personal > Certificates

  • 授予您的IIS AppPool访问MyAmazonClient证书的私钥的权限(与 II 相同的步骤)。

    VI。配置客户端(web.config)
      <system.serviceModel>
    <client>
    <!-- this endpoint has an https: address -->
    <endpoint address="https://mywebserver.myprivatedomain.com/service1.svc"
    behaviorConfiguration="endpointCredentialBehavior"
    binding="wsHttpBinding"
    bindingConfiguration="Binding1"
    contract="MyWebApp.IServiceContract"/>
    </client>
    <behaviors>
    <endpointBehaviors>
    <behavior name="endpointCredentialBehavior">
    <clientCredentials>
    <clientCertificate findValue="MyAmazonClient"
    storeLocation="LocalMachine"
    storeName="My"
    x509FindType="FindBySubjectName" />
    </clientCredentials>
    </behavior>
    </endpointBehaviors>
    </behaviors>
    <bindings>
    <wsHttpBinding>
    <!-- configure wsHttpbinding with Transport security mode
    and clientCredentialType as Certificate -->
    <binding name="Binding1">
    <security mode="Transport">
    <transport clientCredentialType="Certificate"/>
    </security>
    </binding>
    </wsHttpBinding>
    </bindings>
    </system.serviceModel>

    就是这样。

    关于certificate - 如何为WCF传输安全设置客户端和服务器证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8648060/

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