我正在评估使用客户端证书来提高我正在处理的应用程序的安全性。这一切都在 AWS 上运行,并通过带有附加 Lambda 授权方的 API 网关。
AWS 文档指出 API Gateway 不支持通过客户端证书进行身份验证,但允许您在后端进行身份验证,但文档并未提及使用 Lambda 授权方时会发生什么。
我的第一个赌注是它不会工作,因为 API Gateway 无法看到标头。但是当 API Gateway 处理证书的创建和存储时,它可能至少可以在数据流内部对等以获取允许 Lambda 授权器工作的标头数据。
在我的情况下,我想将客户端证书添加到我已经存在的基于令牌的授权中。
可以实现此设置,或者只能通过将令牌验证移动到后端来完成。
我有一个以 HA 代理负载均衡器为前端的 Web API。Web API 使用客户端认证证书进行身份认证和授权。我希望 HA 代理设备终止 TLS 连接并在后端使用普通 HTTP 与 Web API 通信,但我需要通过 HTTP 连接传递的客户端身份验证证书。需要如何设置 HA 代理以将请求的身份验证证书保留在后端,但仅使用 HTTP?
我们有一个 2008R2 IIS 服务器,其中的站点配置为需要客户端证书。我们的测试客户端无法工作,我们正在尝试调试原因。
在此过程中,我们设置了一个新的 Server 2008 R2 机器(是的,我知道它很旧,但这就是运行该软件的机器)来尝试复制或确定故障排除方法。
我们正在研究的一种途径是 TLS 握手。测试应用程序是用 .NET 编写的,并System.Diagnostics
启用了适当的调试,这会将以下条目放入日志文件中:
System.Net 信息:0:[22724] SecureChannel#48979325 - 我们有用户提供的证书。服务器已指定 10 个颁发者。寻找与任何颁发者匹配的证书。
我们无法看到此发行者列表,因此我们爆发了 OpenSSL。运行以下命令:
openssl s_client -connect win2k8r2-1.hsl10690.test:443 -state -no_ticket -servername win2k8r2-1.hsl10690.test
Run Code Online (Sandbox Code Playgroud)
结果输出如下:
[...]
-----END CERTIFICATE-----
subject=/CN=testcert.hsl10690.test
issuer=/CN=Internal Dev CA 1
---
No client certificate CA names sent
---
SSL handshake has read 1013 bytes and written 329 bytes
[...]
Run Code Online (Sandbox Code Playgroud)
因此,我们有一个不匹配的情况,Microsoft 堆栈声明服务器指定了 10 个颁发者,但 OpenSSL 报告服务器没有发送 CA 名称。
对于实时系统,System.Diagnostics 日志报告服务器指定的 130 多个颁发者,但 OpenSSL 仍然返回零。
我们认为问题在于我们提供的客户端证书与颁发者之一不匹配(但我们已经验证了根证书位于服务器的信任存储中,并且我们已经在服务器外部验证了证书)。在实时服务器上,我们在日志中看到“服务器已指定... ”消息之后:
System.Net Information: …
Run Code Online (Sandbox Code Playgroud) 我处于一个奇怪的场景中,我有一个带有 NodeJS 后端和 ReactJS 前端的服务器,它会保存记录,客户希望使用用户证书来识别访问此内部站点的人员。问题是他们有一个非常大的网络,带有复杂的 PKI,而且我分配给该站点的公共证书不一定与所有可以访问它的客户端相匹配。
\n我在前面设置了 nginx,ssl_verify_client optional_no_ca;
但我注意到,如果用户拥有由与 nginx 提供的公钥相同的 CA 正确签名的证书,浏览器只会为用户提供选择客户端证书的选项。
我的理解是,在证书请求期间,服务器可以指定哪些 CA 是可接受的。看起来nginx 可能正在这样做,但我\xe2\x80\x99m 不确定\xe2\x80\x99s 是这种情况。我的计划是明天开始用wireshark进行剖析。有没有一种已知的方法可以让我的网站要求浏览器始终提示用户输入客户端证书?我是否一路上误解了什么?
\n