如何为通过 SSL 进行双向身份验证的本地测试创建客户端证书?

Posted

技术标签:

【中文标题】如何为通过 SSL 进行双向身份验证的本地测试创建客户端证书?【英文标题】:How do I create client certificates for local testing of two-way authentication over SSL? 【发布时间】:2012-06-17 08:58:48 【问题描述】:

我正在尝试在 IIS7 上运行的 Web 应用程序上设置双向身份验证。客户将主要是移动设备,首先我试图让一个使用第三代 iPad 运行的演示。我想我先让它在我的工作站(也运行 IIS)上运行,然后通过 iPad 复制工作证书。

但是我碰壁了。

我已经让网站通过 https 安全运行并安装了自签名服务器证书,但是我似乎无法弄清楚如何生成 客户端证书我可以在 iPad 上安装。由于我在运行 Windows 7 的本地工作站上工作,因此无法使用通常的 http://machinename/CertSvr 来执行此操作。

所以我想知道是否有办法让makecert 生成测试客户端证书,或者我是否可以更改服务器证书中的使用标志以使其适合在客户端上使用。或者也许有一些工具在谷歌搜索的最后一天还没有发现?

更新:

我找到了this guide 并按照它来写信。一切似乎都正常工作,没有错误,我最终得到了两个 pfx 文件,一个用于服务器,一个用于客户端(我使用 pvk2pfx 生成这些文件并保留原始的 .pvk.cer 文件以防万一)。

我在Certificates (Local Computer) > Trusted Root Certification Authority下安装了服务器证书,在Certificates (Current User) > Personal下安装了客户端证书。我还将服务器证书(CA 证书)导入 IIS。当 IIS 配置为接受或忽略客户端证书时,一切正常。但是,一旦将其设置为“要求”,我在请求该站点时就会得到 403.7。我也尝试将客户端证书导入 IE/Chrome 中的证书存储区,但还是没有骰子。

有什么明显的我做错了吗?

【问题讨论】:

没有人回复,但我最终找到了this article,并且可以确认一切正常。希望这对某人有所帮助。 我刚刚为命令输入了一些密码 - C:\Windows\system32>makecert -r -pe -ss my -sr LocalMachine -n​​ “CN=YangsoftCA” -sv “YangsoftCA.pvk” YangsoftCA .cer 注意 - 不要直接复制粘贴该代码。它有非法/毫秒字双引号,这将使命令失败。您必须使用键盘键入它们。如果不这样做,您会收到错误 - makecert 失败 - 错误:CryptCertStrToNameW 失败。但是,此错误还有许多其他原因。 C:\Windows\system32>makecert -r -pe -ss my -sr LocalMachine -n​​ "CN=YangsoftCA" -sv "YangsoftCA.pvk" YangsoftCA.cer 在 Windows 8 之后,makecert 包含在“Windows 软件开发工具包 (SDK)”和“Windows 驱动程序工具包 (WDK)”中。因此,您需要先安装其中一个,然后打开“VS2015 的开发人员命令提示符”以使用 makecert。链接:developer.microsoft.com/en-us/windows/downloads/windows-8-1-sdk 【参考方案1】:

当你问这个问题时,也许这并不存在,但微软现在有一个 GUIDE 来做这件事。易于理解并且非常适合我!

【讨论】:

【参考方案2】:

本地 IIS Express 上启用客户端证书:

将 \YourSlnFolder\.vs\config\applicationhost.config -> <section name="access" overrideModeDefault="Deny" /> 更改为 <section name="access" overrideModeDefault="Allow" />

<sectionGroup name="system.webServer">
...
  <sectionGroup name="security">
  ...
    <section name="access" overrideModeDefault="Allow" />

然后像这样编辑您的 Web.config:

<configuration>
    <system.webServer>
        <security>
            <access sslFlags="SslRequireCert" />
        </security>
    </system.webServer>
</configuration>

IIS 上启用客户端证书:

在 IIS 管理器中转到网站并单击 SSL 设置。然后将应用程序设置为需要 SSL 和需要客户端证书。

创建新证书:

启动 VS 开发者命令提示符

根证书:

makecert.exe -r -n "CN=TestRootCertificate" -pe -sv TestRootCertificate.pvk -a sha1 -len 2048 -b 01/01/2017 -e 01/01/2030 -cy authority TestRootCertificate.cer

输入您的密码。

创建证书吊销列表 (CRL)

makecert -crl -n "CN=TestRootCertificate" -r -sv TestRootCertificate.pvk TestRootCertificate.crl

捆绑到 .pfx(pvk2pfx.exe 需要为 VS2017 安装“使用 C++ 进行桌面开发”)

pvk2pfx.exe -pvk TestRootCertificate.pvk -pi password -spc TestRootCertificate.cer -pfx TestRootCertificate.pfx

来自根证书的客户端证书:

makecert.exe -ic TestRootCertificate.cer -iv TestRootCertificate.pvk -pe -sv localtestclientcert.pvk -a sha1 -n "CN=localtestclientcert" -len 2048 -b 01/01/2015 -e 01/01/2030 -sky exchange localtestclientcert.cer -eku 1.3.6.1.5.5.7.3.2

输入您的密码。

pvk2pfx.exe -pvk localtestclientcert.pvk -pi password -spc localtestclientcert.cer -pfx localtestclientcert.pfx

导入证书。

启动 mmc.exe。

File -> Add or Remove Snap-ins -> Certificates -> Add -> Computer account -> Local computer

Certificates (Local Computer) -> Personal -> Certificates -> Right click -> All tasks -> Import -> localtestclientcert.pfx

Certificates (Local Computer) -> Trusted Root Certification Authorities -> Certificates -> Right click -> All tasks -> Import -> RootCertificate.cer

用于在浏览器中进行身份验证:

File -> Add or Remove Snap-ins -> Certificates -> Add -> My user account

Certificates - Current User -> Personal -> Certificates -> Right click -> All tasks -> Import -> localtestclientcert.pfx

现在访问您的站点需要服务器信任的客户端证书:

如果您按照本指南操作并收到如下错误:

HTTP Error 500.19 - Internal Server Error
The requested page cannot be accessed because the related configuration data for the page is invalid.

或者

HTTP Error 403.7 - Forbidden
The page you are attempting to access requires your browser to have a Secure Sockets Layer (SSL) client certificate that the Web server recognizes.

您可能需要重新启动计算机。请注意,仅关闭 iisexpress 进程或 Visual Studio 是不够的。 500.19 可以在不重新启动的情况下解决,但证书很棘手,因此推荐的方法是重新启动您的计算机。

如果您收到错误The request was aborted: Could not create SSL/TLS secure channel,可能是由于应用程序池无权访问特定证书。

证书(本地计算机) -> 个人 -> 证书 -> localtestclientcert -> 右键单击​​ -> 所有任务 -> 管理私钥 -> 添加IIS APPPOOL\YourWebSite 并授予它完全控制权。

【讨论】:

以上是关于如何为通过 SSL 进行双向身份验证的本地测试创建客户端证书?的主要内容,如果未能解决你的问题,请参考以下文章

如何为测试目的创建自签名 SSL 证书? [关闭]

Java测试客户端中的SSL Handshake_failure,同时使用双向身份验证连接到服务器

将 Spring Security(双向 SSL)配置为仅对 CORS 预检 OPTIONS 请求进行身份验证

如何为需要用户身份验证的API构建Rspec请求测试

会话管理:如何为 REST 服务生成身份验证令牌? (球衣)

如何为 2 台服务器设计用户身份验证