.net - 设置 IIS 客户端证书映射身份验证(客户端需要私钥)
问题描述
我已经开始开发安全的 Web 服务,并且正在学习 SSL 概念。
要求:我想保护我的 Web 服务(允许访问已将客户端证书添加到其请求中的 Web 请求)。客户端可以从桌面/网络/控制台应用程序向我们的网络服务发送请求。
我有什么(资源):
颁发给我的站点 *.wildcard.com 的有效证书,此证书安装在具有公共 IP 和域映射到 wildcard.com 的服务器机器上。此证书用于为我的站点设置 SSL 绑定 (443)。此证书的用途是服务器身份验证 (1.3.6.1.5.5.7.3.1) 客户端身份验证 (1.3.6.1.5.5.7.3.2)。
我到目前为止所尝试的:
服务器端环境
在 IIS 上,我设置了我的网络服务 @ https://wildcard.com/SSLTest/Connect.asmx并将 SSL 设置设置为:
[SSL 设置 IIS] ( https://drive.google.com/file/d/1BGqXjj1Xh365lSm0NU_jXr0CheR6DpK5/view?usp=sharing )
然后,在配置编辑器 -> system.webServer/security/authentication/iisClientCertificateMappingAuthentication
我尝试将 onetoOneMappings 设置为:
[OnetoOneMapping] ( https://drive.google.com/file/d/1vga_cieP-8iJzl9aLflGTFP-yDaG0xn4/view?usp=sharing )
在上述设置中,证书是使用 SSL 证书生成的 .cer 文件(公钥)的开始和结束证书行之间的值。
客户端环境:
我编写了一个控制台应用程序(C#.net),它使用 .net 框架的 HTTPWebRequest 发送 SOAP 请求,并将客户端证书添加到请求对象中
webRequest.ClientCertificates.Add(cert);
该证书是从客户端机器中选择的,使用:
X509Store computerCaStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
然后向https://wildcard.com/SSLTest/Connect.asmx发送请求。但我得到了,错误 403.7 禁止错误。当我发送证书(带私钥)时,这有效。
是否必须在请求中从客户端计算机发送私钥?如果是,则安全性受到损害,因为我们无法与他人共享私钥。那么我将如何将公钥分发给客户端,以便他们可以访问 Web 服务。或者,也许我误解了这个场景?IIS 上的 iisClientCertificateMappingAuthentication 有什么用?
~谢谢
解决方案
推荐阅读
- javascript - JS Check 属性是否存在于数值
- sql - Sql - 从 oracle sql 中的结果集中获取最大值
- ruby-on-rails - Rails 5:附加较大的缩略图
- javascript - 如何从反应按钮 onClick 获取值
- c# - 在 C# 中看不到任何引用静态数组的资源
- android - gradlew.bat 在 Android Studio 中每次提交后总是改变
- sql - SQL 在 char 处拆分字符串,然后将每个拆分为单独的 chars() 作为视图或仅选择
- laravel - 如何在 laravel 5.6 中通过浏览器读取 api 基础项目
- arrays - 从大小为 n 的数组中计算长度为 k 的子序列的数量
- spring - 如何在 oneToMany 中进行 Spring 过滤