问题标签 [ssl-client-authentication]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ssl - 使用自签名证书在 Chrome 上失败的客户端身份验证
我知道有很多关于同一主题的问题。不幸的是,没有什么能解决我的确切问题。所以让我具体一点。我正在开发一组需要证书身份验证的 REST API(很奇怪,但就是这样)。因此,为了进行测试,我们创建了自签名证书,openssl
如下所示:
现在,一个 nginx 设置为使用这些 ssl 证书运行,需要客户端身份验证。nginx 配置如下所示:
postman
使用上面生成的客户端证书测试 API工作正常。到目前为止一切都很好。我们创建了一个 swagger-ui,它提供了一个直接从浏览器测试的选项。但是这里的客户端身份验证不起作用。
我尝试在我的 Windows 10 中将 CA 证书导入受信任的 CA 存储,并将客户端证书导入个人,并尝试从 Chrome 和 Edge 进行测试,但服务器拒绝使用400 No required SSL certificate was sent
.
更新
添加的输出openssl s_client -connect localhost:443
我怎样才能让它工作?自签名证书有什么限制不能这样使用吗?任何帮助表示赞赏!
smartcard - 使用 Chromium Embedded Framework 缓存智能卡 PIN
我有一个面向服务的 webapp,它使用 IIS 8.5 和通过智能卡的客户端证书身份验证。静态服务的前端通过 AJAX 调用多个服务。带有证书的智能卡受 PIN 保护。使用 Chrome、Firefox 等时,PIN 提示出现一次,并且似乎已缓存以供后续使用。
但是,我们需要使用cefsharp将 webapp 嵌入到 Windows 10 .NET 桌面应用程序中。该网络应用程序有效,但要求用户不断输入他们的 PIN,每次服务似乎一次,然后在一段时间后再次超时,(我认为)每项服务。
我不知道从哪里开始知道是否可以使用 cefsharp 实现缓存。从我读到的内容来看,这些数据应该已经被 Windows 缓存了,但看起来情况并非如此,或者嵌入的 chromium 混淆了缓存策略。
智能卡 PIN 缓存是否可以使用 cefsharp(或 IIS,如果必须的话,甚至是客户端的 Windows 机器)来完成?
javascript - 带有有效负载的 POST 方法时 Nginx 不要求客户端证书
我已经为 ssl-client-authentication 配置了 nginx。它适用于 GET 和 POST(没有有效负载)。但是当我们使用带有正文的 POST 时,客户端没有通过证书。
- 要么 nginx 不要求证书
- 或者客户端(javascript)本身忽略了我不确定的证书
Nginx 配置
请帮忙,谢谢。
python-requests - 当两者都需要不同的客户端证书时,如何使用 Python 请求通过代理连接到服务器
我想requests
通过代理使用 python 库连接到 https 服务器。代码大致看起来像
我的问题是,服务器和代理都需要客户端身份验证,不幸的是,不同的 CA 用于对服务器和代理进行身份验证。有没有办法在发出请求时传递两个 CA?在这种情况下,文档似乎不是很清楚。
任何帮助是极大的赞赏:)
方法尝试:
尝试了另一个链接Python 请求中建议的方法 - 如何添加多个自己的证书,并使用以下代码将证书和密钥捆绑到单独的 pem 文件中:
似乎只使用了第一个证书和密钥,所以我能够在代理服务器上通过客户端身份验证,但在目标服务器上身份验证失败。
http - Go: validate subsequent http requests with authenticated client via certificate
I'm currently writing a HTTP server(net/http) which hosts multiple endpoints and requires client authentication(step 1) before accessing these endpoints. Upon successful authentication, the server issues a short-lived token which the client then use to access these endpoints. when the client sends the token(via HTTP Header), have a piece of code at the start of every handler function to check the client is authenticated and presented token is valid. I'm looking for a hook/wrapper which can intercept and validate the client instead of calling isAuthenticated(r)
from every endpoint function.
go - 如何在 Go 中创建使用 TLS 客户端身份验证的测试服务器?
我想为从设备证书中提取某些信息的 HTTP 处理程序编写一个单元测试。我找到了这个要点https://gist.github.com/ncw/9253562,它用于openssl
生成证书并简单地读取其client.go
和server.go
. 然而,为了让事情更加透明,我想使用 Go 的标准库生成证书。
这是我迄今为止在单元测试中的尝试(可在https://github.com/kurtpeek/client-auth-test获得):
但是,当我运行它时,我收到以下错误:
我不确定如何处理错误消息
无法验证 127.0.0.1 的证书,因为它不包含任何 IP SAN
因为我在IPAddresses
创建证书时正在现场传递。关于这里有什么问题的任何想法?
git - 带有 SSL 客户端证书的 Eclipse Egit 推送到远程失败(不允许使用 git-receive-pack)
在开始之前,让我说我已经阅读了所有其他类似主题的帖子,但没有找到解决方案。
我的远程 git 存储库 (Gitea) 托管在启用了 https 的 VPS 上,并且服务器配置了 SSL 客户端身份验证,因此它需要用户提供 SSL 客户端证书。将客户端证书导入浏览器后,可以通过网页查看 repo。
使用 Eclipse,在将 SSL 客户端身份验证添加到远程服务器之前,我成功地将项目克隆到本地 git 存储库。然后我在服务器上激活了 SSL 客户端身份验证。
当我在 Eclipse 中提交代码更改,然后git push
从命令行使用远程源时,服务器成功验证了客户端并将更改推送到远程仓库,没有问题。
但是当我尝试从 Eclipse 中推送到远程时,它会失败并显示错误“无法连接到任何存储库 - git-receive-pack 不允许”。
Eclipse 中的 git config 参数包括以下 http config:
git push
由于从命令行使用这些设置可以正常工作,这证明配置是正确的。我还需要在 Eclipse 中配置什么才能使 Eclipse 成功推送?
(另请注意,尝试在 SSL 客户端身份验证活动的情况下从远程存储库中克隆或拉取会导致类似的行为 - 从命令行使用 git 可以正常工作,但不能使用 Eclipse。)
更新:nginx web 服务器提供对远程 repo 的 https 访问,nginx 日志显示如下:
当我将 URL 复制到浏览器并在其前面加上我的服务器 URL 时,浏览器会弹出标准的基本身份验证(用户名/密码)窗口。当我输入用户名/密码时,它会返回一个网页:
这是正确的反应。因此,似乎当 Eclipse 尝试推送时,它会调用 jgit 来触发 git-receive-pack 以获取上述信息,但由于 jgit 未传递所需的用户名/密码而失败。线索。我想知道如何配置 Eclipse 以将所需的凭据传递给 jgit?
php - Nginx 可以在没有代理的情况下将 ssl_client_verify 添加到请求标头以让 Symfony 知道正在使用客户端 ssl 证书?
对于一个网站,我使用的是需要客户端 ssl 证书的 nginx 配置。我希望我的 Symfony/php 项目能够验证是否正在使用客户端 ssl 证书(并从证书中提供一些额外信息)。所以我正在考虑通过将它添加到请求 http 标头来做到这一点。
在我的 nginx 站点配置中,我设置了:
这有效,客户端证书是强制性的。
但我希望我的底层 Symfony/php 项目能够验证是否正在使用客户端证书。我正在考虑将它添加到 http 请求标头,但我似乎只能像这样(在同一个 nginx 站点配置中)将它添加到 http 响应标头(返回浏览器):
在 Firefox 中,我确实可以看到这个响应标头,但这不是我想要的(并且可能是安全隐患)。我也调查过这个:
但这不起作用,因为我没有使用代理。
是否有其他方法可以将元素添加到请求标头?或者是否有另一种方法可以将客户端 ssl 证书信息获取到我的 Symfony / php 项目中?
asp.net-core - 证书验证失败:验证证书时客户端证书验证失败
我正在尝试获得相互客户认证以在 Azure 中工作。我正在使用以下配置运行 Web 应用程序:
作为对此的扩展,我添加了 Web 应用程序将客户端证书发送到我的应用程序。当我部署它时,它很好。我前面有 cloudflare 并启用了 Origin Pull,我可以验证客户端证书是通过发送的。我可以看到,当我尝试直接在 azurewebsites.net 域上访问 Web 应用程序时,我的浏览器正在请求证书。如果我尝试通过 Cloudflare,它将显示网页。我认为这是可行的,但是当我检查日志时,我得到了:
2020-07-02 13:30:52.711 +00:00 [信息] Microsoft.AspNetCore.Hosting.Diagnostics:请求开始 HTTP/1.1 GET https://[REMOVED]/api/ping
2020-07-02 13:30:52.718 +00:00 [Trace] Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware:允许所有主机。
2020-07-02 13:30:53.107 +00:00 [警告] Microsoft.AspNetCore.Authentication.Certificate.CertificateAuthenticationHandler:证书验证失败,主题为 OU=Origin Pull,O="Cloudflare, Inc.",L= San Francisco, S=California, C=US.UntrustedRoot 已处理的证书链,但以不受信任的提供者信任的根证书终止。RevocationStatusUnknown 吊销功能无法检查证书的吊销。OfflineRevocation 吊销功能无法检查吊销,因为吊销服务器处于脱机状态。
2020-07-02 13:30:53.107 +00:00 [信息] Microsoft.AspNetCore.Authentication.Certificate.CertificateAuthenticationHandler:证书未通过身份验证。失败消息:客户端证书验证失败。
2020-07-02 13:30:53.110 +00:00 [调试] Microsoft.AspNetCore.Routing.Matching.DfaMatcher:为请求路径“/api/ping”找到 1 个候选者
看起来客户端证书不被接受。应该是吗?我的意思是,它是 Cloudflare。我在设置中做错了吗?我应该在我身边安装一些额外的东西吗?我在这里浏览了本指南:https: //support.cloudflare.com/hc/en-us/articles/204899617-Authenticated-Origin-Pulls并没有提及额外安装证书的任何内容。我应该在网络应用程序本身上安装 origin-pull-ca.pem 吗?
当我将发送给我的证书与 origin-pull-ca.pem 进行比较时,两者不相等:
- origin-pull-ca.pem:指纹:1F5BA8DCF83E6453DD75C47780906710901AD641(附加信息:CN=origin-pull.cloudflare.net, S=California, L=San Francisco, OU=Origin Pull, O="CloudFlare, Inc.", C=我们)
- 从 Cloudflare 发送:指纹:A27996CBA564D24731BC76439C48920C1F7D4AA3(附加信息:OU=Origin Pull,O="Cloudflare, Inc.",L=San Francisco,S=California,C=US)
他们不应该是平等的吗?
请注意:我不是证书、SSL 等方面的专家。我想在这里学习 :)
security - 带有 TLS 客户端身份验证的 nginx... 错误响应未经过相互身份验证?
我玩弄了 nginx 和双向 TLS 身份验证。为此,我将 nginx 服务器配置为使用 config 参数实际使用客户端身份验证:
它有效,但我对终止过程有疑问。
如果我向例如 https://localhost 发出 get 请求并ssl_verify_client on;
已设置,即使我没有提供有效的客户端证书,我也会收到 http 响应:
400 Bad Request 未发送所需的 SSL 证书
对我来说,TLS 连接在 TLS 握手时终止是有道理的。当连接未相互验证时,为什么我会收到 http 响应?
我还阅读了 RFC 5246,它基本上说可以这样做(设计师选择):
然而,TLS 标准并没有指定协议如何通过 TLS 增加安全性。关于如何启动 TLS 握手以及如何解释交换的身份验证证书的决定留给了在 TLS 之上运行的协议的设计者和实现者的判断。
在应用层而不是传输层上做这件事有很好的论据吗?是否有可能在不使用代理(例如 HAProxy)的情况下提前终止 TLS 连接?