问题标签 [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.

0 投票
1 回答
7034 浏览

linux - Apache客户端身份验证:证书验证:错误(2):无法获得颁发者证书(SOLVE)

我正在尝试在目录和证书吊销列表 (crl) 上配置具有客户端身份验证的服务器。我曾经成功地使客户端客户端身份验证有效,但现在不再有效,而且我从未成功使吊销列表有效。

这是我的配置文件:

  • 默认-ssl.conf

  • apache2.conf

我使用以下 tuto 创建根和中间 AC:https ://jamielinux.com/docs/openssl-certificate-authority/ (第 1 部分和第 2 部分)

我使用以下命令生成客户端证书:

4 - 创建客户端证书 4.1 创建客户端密钥 openssl genrsa -des3 -out client.key 4096

现在这是我的问题,似乎我的中间证书不受信任,实际上当我尝试使用 Mozilla 访问目录 /var/www/html/testClientCert 时(我在 Mozilla 中导入了中间 AC + 客户端证书),我有以下错误:

当我使用根 AC 证书签署中间 AC 证书并且我的客户端证书由中间 AC 签名时,怎么会发生错误?

0 投票
0 回答
1483 浏览

apache - TLS 客户端身份验证错误

我正在尝试在 F5 BIG-IP 和运行 Apache2 的 Ubuntu 服务器之间配置 TLS 客户端身份验证(相互身份验证)。不幸的是,无论我尝试什么,它都会在 /log/apache2/error.log 下显示以下消息失败:

一些基本数据:

Apache2 版本:Apache/2.4.7

OpenSSL 版本:已安装:1.0.1f-1ubuntu2.22

BIG-IP 版本:11.6.1

我已验证 F5 提供的证书使用正确的证书模板(客户端身份验证)。F5 和 Apache 端的证书都由同一个 CA 签名。我的虚拟主机文件下有以下设置:

在这一点上我有点难过。这个概念验证是一个非常重要的项目,对我们的客户来说非常重要,他们非常渴望把它钉牢。

谢谢你的帮助。

0 投票
0 回答
843 浏览

java - 服务器客户端身份验证请求主题可分辨名称,但客户端过滤器使用颁发者可分辨名称

目前我在服务器和客户端上启用相互 SSL 时遇到问题。

在服务器端,我使用启用 ClientAuth 配置 tomcat 并将客户端的证书配置到信任库。

所以在 ssl 握手期间,我可以看到服务器的证书请求:

我们可以看到服务器正在使用 Subject Distinguish Name 请求证书。但是在客户端,当客户端过滤密钥时,它会将 DN 视为颁发者 DN,请参见此处的代码:http: //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6- b14/sun/security/ssl/SunX509KeyManagerImpl.java#378

所以这会导致一个问题:

所以握手失败了。

以下是一些证书信息:

我的问题是为什么服务器使用主题 DN 请求客户端证书,但客户端将使用 IssuerDN 过滤?

为了让他们成功连接,我需要使用客户端的父证书配置我的服务器的信任库,其主题 DN 与颁发者相同:DC=com、DC=domain、CN=Domain。com 安全

对此有任何想法吗?我可能对此有一些误解,但仍然想知道为什么。

0 投票
1 回答
558 浏览

c# - 如何在 TLS1.2 握手期间忽略服务器请求的签名哈希算法?

我有一个 C# 应用程序成功建立了 TCP TLS 1.0 连接,并与另一家公司的服务器进行了相互身份验证。它是使用 SslStream 类实现的。我们只是这个非常大的组织的众多客户之一。

上面这个 TCP 链接必须经过 TLS 1.2 + SHA2 升级。在我们完成所有必要的步骤并使用我们的本地服务器成功测试之后,我们仍然无法尝试连接到远程服务器。长期调查显示,在 TLS 握手期间,服务器向我们发送证书请求,其中只有签名哈希算法 = SHA1-RSA 的选项(见下图)。我们的证书是 SHA256。结果,SslStream 根本没有将我们的证书发送到服务器,服务器将此视为握手失败并关闭连接。

TLS 握手失败

造成这种麻烦的原因是我们的交易对手使用非常旧的 (10.x) 版本的 F5 防火墙来终止 SSL。尽管它支持客户端的 SHA2 证书,但它只在证书请求中发送 SHA1/RSA 签名哈希算法。

在承认上述事实的同时,我们的交易对手无法尽快升级 F5。他们建议忽略请求的签名哈希算法并发送我们的 SHA256 证书。显然,连接到他们的其他客户能够以某种方式做到这一点。

不幸的是,.Net 的 SslStream 没有为 TLS 握手提供那种级别的微调。

因此问题是:是否可以完全忽略服务器对基于 SHA1RSA 的证书的请求?我有什么选择?是否有实现 TLS 1.2 的 SslStream 替代方案?有开源的第三方解决方案吗?任何建议都会有所帮助。提前致谢。

0 投票
1 回答
18 浏览

apache - 存储我们通过 SSL 握手获得的证书

我们已经通过SSLVerifyClient require方法完成了客户端证书认证。现在正在按要求进行身份验证。

现在我们要存储client certificate客户端在 SSL 握手期间呈现的内容。

有没有办法可以将身份验证期间获得的客户端证书保存到目录或某处?我需要从客户端证书中获取公钥和 CN 信息。

0 投票
2 回答
527 浏览

wcf - 客户端证书通过 ARR 和 AuthorizationContext 具有不同的指纹

我目前正在开发 WCF 服务的原型,该服务将使用客户端证书身份验证。我们希望能够直接将我们的应用程序发布到 IIS,但也允许使用 IIS ARR(应用程序请求路由)进行 SSL 卸载。

在深入研究文档后,我已经能够成功测试这两种配置。我能够检索用于从以下位置进行身份验证的客户端证书:

  1. X-Arr-ClientCert - 使用 ARR 时包含证书的标头。
  2. X509CertificateClaimSet - 当直接发布到 IIS 时,这是检索客户端证书的方法

为了验证请求是否被允许,我将证书的指纹与在某处配置的预期指纹进行匹配。令我惊讶的是,当通过不同的方法获得证书时,同一个证书有不同的指纹。

为了验证发生了什么,我已将两个证书上的“RawData”属性转换为 Base64 并发现它是相同的,除了在 X509CertificateClaimSet 的情况下,证书数据中有空格,而在 ARR 的情况下,没有。否则,两个字符串相同:

base64字符串比较

我的问题: 有没有其他人遇到过这个问题,我真的可以依靠指纹吗?如果没有,我的备用计划是对主题和发行者进行检查,但我愿意接受其他建议。

我在下面包含了一些(简化的)示例代码:

0 投票
2 回答
1830 浏览

java - Jetty:如何在应用程序代码中验证 SSL 客户端证书?

我有一个多租户网络服务,我想使用相互 SSL/TLS 身份验证以及用户身份验证。这意味着我需要解析用户和用户允许的证书,这只能在建立 SSL 连接后发生。然后,我将使用PKIXCertPathBuilderResult请求中传递的客户端证书来验证信任链。

在带有 openssl 连接器的 Tomcat 中,可以使用optional_no_ca模式,它请求客户端证书但不验证它。

使用 Jetty 9.x,我尝试配置以下SslContextFactory选项无济于事:

  • ValidateCerts=false
  • ValidatePeerCerts=false
  • TrustAll=true

如何在 Jetty 9.x 中实现这一点?

2019 年编辑:要求是要求访问系统的所有客户端设备提供 SSL 证书。证书链和其他证书属性的验证将由应用程序执行,该应用程序还能够从外部源查找丢失的证书根。这与规范相反——通常,应用程序服务器将在 SSL 连接设置期间使用预先配置的已知受信任 CA 的静态列表执行证书链验证。如果无法找到信任,则 SSL 连接被拒绝。

0 投票
1 回答
2361 浏览

java - SSL 客户端 (Java) 未在双向 SSL 握手中将证书发送回服务器

我们正在尝试使用 https 协议访问托管在IIS 服务器上的 RESTful Web 服务资源。

当我们禁用TWO WAY SSL Auth(禁用客户端证书的服务器端验证)时,一切正常。

当 IIS 强加TWO WAY SSL(启用客户端证书的服务器端验证)时,我们得到以下异常:

403 - 禁止:访问被拒绝。

您无权使用您提供的凭据查看此目录或页面。我们正在使用 java 1.8 update 102、IIS server 7.5 和 TLS 1.2 for ssl

详细问题请打开以下链接:

有关详细信息 SSL 调试日志、证书、客户端程序

如果有人帮助我们,那将是很大的帮助。

谢谢!

0 投票
0 回答
343 浏览

ssl - 无法更新服务器首选密码套件顺序

我正在尝试更新 Windows Server 2008 上的服务器首选密码套件顺序,我已关注更新密码套件博客,但我仍然在 SSL 实验室中看到旧的首选顺序。

0 投票
1 回答
618 浏览

google-chrome - chrome 中的数字证书

我的 Web 应用程序中有以下案例。用户使用的常用浏览器是 Chrome。

我使用用户拥有插入读卡器的加密卡的数字证书。

要登录应用程序,基本上用户访问读取证书数据的 https 链接。

到目前为止一切正常。

如果用户结束他的应用程序会话关闭浏览器,则没有问题。一切都结束了。

但是,如果用户想离开他的应用程序会话,而不关闭所有浏览器窗口,这就是我的问题。

有一个按钮可以关闭应用程序的会话,用户离开并重定向到初始登录屏幕。似乎一切都已重置,因为用户已经离开。但是当新用户想要登录并按下链接读取证书数据时,不是重新读取新卡,而是使用前一张卡中的数据,而不仅仅是要求密码来访问它。

问题更进一步,例如,如果用户忘记了卡,卡并尝试登录,则无法读取证书。但是现在,虽然插入正确,但在重新启动浏览器之前不会再次读取该卡,这维护了一个没有证书的缓存。

目前只有关闭所有 Chrome 窗口才能找到解决方案,但这取决于用户是否这样做。

部分解决方案肯定会用 javascript() 关闭浏览器,但有一段时间,它不能用 javascript (window.close()) 关闭,这是一个无法从站点本身打开的窗口,可用的我认为已经排除

有人可以为我做出贡献吗?谢谢