问题标签 [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 投票
2 回答
12970 浏览

java - 在 Tomcat 中读出传入的证书

我使用带有客户端身份验证的 tomcat http 连接器。如果客户端启动到我的服务器的新连接并发送他的证书,我可以获取证书并从我的 java 代码中的传入证书中读取公用名。如果是,如何?

谢谢阿迪

0 投票
1 回答
291 浏览

java - SSL:客户端身份验证,同一商店中的多个证书版本

情况如下:

  1. 我们的应用程序与多个 3rd 方应用程序对话,其中很少有人需要客户端身份验证。

  2. 一个特定的第三方应用程序需要客户端身份验证,并且已经适当地提供了证书(我们在我们的密钥库 (JKS) 中导入了这些证书)。这是在集成测试期间。在测试环境中一切正常。

  3. 现在在上线之前,他们想要升级 CA 颁发的证书。

  4. 对于新证书,我们总是可以创建一个新的存储,但是为了方便想知道两个证书(旧的和新的)是否可以驻留在同一个存储中?(这样万一他们回滚,我们这边就没有变化

  5. URL 相同,应用程序(http-client 库)如何知道在调用服务器时要呈现哪个客户端证书版本?

0 投票
1 回答
274 浏览

android - Android SSLSocket#getInputstream() 在 Android 6.0 的早期版本上抛出 HandshakeException

在我的应用程序中,我需要处理 SSLSocket。我有这个在 Android6.0 及更高版本上运行的代码,当我在 Android 5.+ 上运行相同的代码时,我得到了 HandshakeException

我在 android 开发者网站上阅读了这篇文章并实现了下面的代码我得到了服务器管理员的 .crt 文件

即使这样,我在调用 mSocket.getInputStream(); 时也会收到 HandshakeException;方法

这是日志

0 投票
1 回答
1783 浏览

postman - 单个域的邮递员和多个客户端证书?

我已经使用 Fiddler 几个星期来测试 API,但我们正在转向 Postman。

我们的 API 工作流程是设备必须使用通用证书进行注册,并且作为对成功注册的响应,会向该设备颁发私有证书。之后设备发出的所有请求都使用私有证书。

我正在尝试测试多个设备,这意味着我需要 Postman 为单个域使用 5 或 6 个证书。在 Fiddler 中,我可以修改 fiddlerscript,这样我就有了一个包含我打算使用的所有证书的数组。如果我想切换证书,我打开脚本并使用我的证书数组的不同索引。我已经设置oSession["https-Client-Certificate"]并且请求将使用该证书。

在邮递员中,我看到我可以为特定域设置客户端证书。我已经能够让它为全局证书工作并成功运行 /register 请求。然后我可以更改证书并继续。如果我想在每次请求后更改此证书,这是一个烦人的过程,因为我模拟了多个设备,每个设备都有自己的证书。

我看到有一个 Pre-Request Script 选项卡。有没有办法在这个脚本中更改客户端证书?如果不使用预请求脚本,是否还有其他地方可以让我为单个域拥有多个证书并在请求之间轻松切换?

0 投票
2 回答
824 浏览

ssl - ssl客户端认证后如何通过rabbitmq结合mqtt和认证后端实现主题认证?

我设置了 RabbitMq v3.6.6,并尝试在客户端 ssl 身份验证成功后实现主题身份验证。客户端连接使用 mqtt。

到目前为止的配置

我已经安装了插件rabbitmq_auth_backend_httphttps://bintray.com/rabbitmq/community-plugins/download_file?file_path=rabbitmq_auth_backend_http-3.6.x-1b27d722.ez)和rabbitmq_topic_authorizationhttps://github.com/airboxlab/rabbitmq-topic-授权/发布/下载/v3.6.6/rabbitmq_topic_authorization.ez)并启用它们。

为什么我这样配置

https://github.com/rabbitmq/rabbitmq-auth-mechanism-ssl有一条注释:

请注意,经过身份验证的用户将在配置的身份验证/授权后端中查找 - 默认情况下,这将是基于 mnesia 的用户数据库,但如果这样配置,则可能包括其他后端。

我通过包含和启用插件并配置auth_mechanismsEXTERNAL. 并且auth_backendsrabbit_auth_backend_http

在 mqtt 插件文档 ( https://www.rabbitmq.com/mqtt.html ) 中有一节Authentication with SSL client certificate,这是我想要实现的。我将重要部分设置为粗体

使用 SSL 客户端证书进行身份验证 MQTT 适配器可以通过从客户端的 SSL 证书中提取名称来验证基于 SSL 的连接,而无需使用密码。

为安全起见,必须将服务器配置为 SSL 选项 fail_if_no_peer_cert 设置为 true 并将verify 设置为 verify_peer,以强制所有 SSL 客户端具有可验证的客户端证书。

要打开此功能,请将 rabbitmq_mqtt 应用程序的 ssl_cert_login设置为 true。例如: [ {rabbitmq_mqtt, [{ssl_cert_login, true}]} ].

要改用通用名称,请将:添加 {rabbit, [{ssl_cert_login_from, common_name}]} 到您的配置中。

请注意:经过身份验证的用户必须存在于配置的身份验证/授权后端中。 客户不得提供用户名和密码。

问题

当我想通过订阅时,sudo mosquitto_sub -h my-backend --cafile ca.crt --key client_keyfile.key --cert client_certfile.crt -t '#' -p 8883 我得到了错误Connection Refused: bad user name or password.

RabbitMq 日志显示以下输出:

在这一点上,我希望 RabbitMq 要求后端进行身份验证,而不是立即拒绝。但是我的后端服务器根本没有请求。此外,当我使用客户端证书时,不应该出现抱怨名称或密码的错误。我用 curl 测试了后端服务器,我得到allow了预期的响应。我还可以验证 nginx 日志中的访问权限。所以我猜rabbitmq_auth_backend_http它不能正常工作或其他配置错误。

有谁知道为什么不请求后端服务器?

0 投票
1 回答
1270 浏览

ios - 具有客户端身份验证的 GCDAsyncSocket

我一直在使用CocoaAsyncSocket在没有 SSL 的情况下将数据发送到我们的服务器。现在服务器端已经实现了带有客户端身份验证的 SSL/TLS。为了在我们的应用程序中实现这一点,我得到了以下三个文件:

  1. ca-chain.cert.pem
  2. 客户端-test.cert.pem
  3. 客户端-test.key.pem

我将文件转换为 iOS 可读格式,如下所示:

  1. ca-chain.cert.pem 到 ca-cert.cer
  2. client-test.cert.pem 到 client_cert.cer
  3. client-test.key.pem 到 client_key.p12

我已经让它工作到 SSL。但是客户端身份验证有问题。

这是我的代码:

didConnectToHost:

didReceiveTrust:

加载证书:

两天来,我一直在努力进行客户端身份验证。我现在收到此错误:

我确实读过 CocoaAyncSocket 库在手动信任评估的客户端身份验证方面存在问题。我尝试了此处提到的解决方法:通过手动信任评估支持客户端身份验证仍然没有运气。我找不到我缺少的东西。

提前致谢!-乌玛

0 投票
1 回答
578 浏览

ssl-client-authentication - Java 中的 SSL 客户端

我想在 java 中创建 SSL 客户端。我有 SSL 服务器提供的 3 个文件,即: 1. 服务器的公钥:CAfile.pem 2. 客户端的私钥:client.pem 3. 客户端的公钥:client.crt

使用客户端的私钥和公钥,我创建了 1 个作为 pkcs12 文件的密钥库,并使用服务器的公钥创建了 1 个作为 JKS 文件的信任库。然后我设置以下系统属性:

而且,我的 TLS 握手代码的一部分是:

但是,在握手时,我遇到了以下错误。

请帮忙。

谢谢

0 投票
0 回答
650 浏览

netty - 在 netty 中使用 SunPKCS11 进行 TLS 客户端身份验证的 gRpc 失败

我有一些 java 8 应用程序,使用gRPC进行网络通信。为了确保这一点,我使用 TLS 和客户端身份验证。现在,我尝试从软件密钥切换到智能卡,持有用于客户端身份验证的私钥和证书(链)。我在 gRPC 中使用 sun pkcs#11 提供程序制作 netty 的代码如下所示:

测试我看到的代码,它对智能卡进行身份验证(提供一些错误的 PIN(而不是“11111111”)会减少卡上相应的重试计数器。此外,使用 pkcs11 dll 的调试版本,由sun pkcs11 提供程序,我看到,sun 提供程序进行身份验证,列出所有密钥,读取所有证书等(经常),但不尝试执行一些私钥操作。此外,提供-Djava.security.debug=sunpkcs11 到 JVM 并没有提供任何进一步的内部信息(我偶然发现在SSL 客户端身份验证中使用智能卡在 Java 6 中工作但在 Java 7 中失败)。

使用wireshark查看它看起来的TLS协议握手,客户端尝试省略客户端身份验证部分,这使得服务器关闭连接。这会导致客户端出现一些异常:

io.grpc.StatusRuntimeException:不可用:在 io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:208) 的 io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:227) 执行协议协商时通道关闭.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:141)

从智能卡提供与 PEM 文件相同的密钥和证书SslContextBuilder确实会导致工作连接,因此我得出结论,证书和密钥本身不会形成问题,但可能/可能是 sunpkcs11 的某些配置?

有人成功使用带有 PKCS#15 智能卡/PKCS#11 令牌的 gRPC 吗?有没有人有进一步的建议,如何轻松理解,这里有什么失败?

0 投票
1 回答
1543 浏览

apache - 通过 Apache 反向代理的 Spring Boot 证书身份验证

我已成功将 Apache (2.4.7) 配置为需要客户端证书,并且 - 作为反向代理 - 将证书中的信息转发到 Tomcat 8 服务器。

然而,当试图用 Spring Boot 完成同样的事情时,它失败了

并返回 HTTP 502 错误代码。

相关的工作 Tomcat 配置是:

Spring Boot application.properties 文件的相关部分不起作用:

请注意,直接访问应用程序时(即请求https://myapp.company.tld:12345/myapp)它工作得很好,但使用反向代理(即https://proxy-load-balancer.company.tld: 12345/myapp ) 抛出上述错误。

端口差异(12345 与配置的 8443)是由于中间 Docker 层:反向代理和应用程序都在容器中运行,并且它们的开放端口(Apache 为 443,Tomcat/Spring Boot 为 8443)映射到不同的端口,即 12345。

0 投票
2 回答
3047 浏览

amazon-web-services - AWS API Gateway MTLS 客户端身份验证

每次我为AWS API Gateway搜索基于SSL 的 Mutual Auth 时,我只能在 AWS API Gateway 和后端服务之间找到 MTLS。但我希望使用MTLS (client auth)保护我的 AWS API Gateway 端点本身。

例如,我有一个通过 AWS API Gateway 代理的支持服务 QueryCustomer。现在我可以在 API Gateway 上放置一个 SSL 证书,但它通常是单向 SSL。我想要实现的是具有客户端身份验证的 MTLS,其中来自 AWS API Gateway 的 API 消费者首先必须交换我们在AWS 信任库上配置的公共证书,并且 AWS 公共证书也将存储在 API 消费者端。

现在,在与其他 API 网关和应用程序服务器握手期间,应该有一个属性显示类似这个 AWS API 网关端点“需要客户端身份验证”,这样只有当 API 使用者的公共证书在 API 网关信任库中时,才应该通过身份验证来访问端点,否则只会抛出正常的 SSL 握手错误。

有人可以建议这是否可以在 AWS API Gateway 上实现?