问题标签 [mutual-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.
java - 什么时候在 X509KeyManager 中调用 getPrivateKey?
我正在编写自己的 X509KeyManager 实现,并且遇到了函数 getPrivateKey(String alias){} ,我只是想知道何时调用该函数。在文档中,何时何地调用所有这些函数并不是很清楚。我很难理解它的机制和执行流程。有人可以帮助我吗?谢谢
tornado - Mutual Authentication in Tornado with self signed certificates
Going through the Tornado docs, I can't seem to find a treatment about two way SSL authentication. Currently the codes looks something like this using self-signed certificates:
c# - 如何对 Web 服务中的某些端点执行相互身份验证?
我有一个 .NET MVC Web 应用程序,我将公开一些端点,这些端点只能被某些授权的内部应用程序访问。我想通过某种形式的相互身份验证来实现这一点,以便网络服务可以验证调用者的身份。
我为此看到的许多解决方案似乎都依赖于 IIS 级别的配置,因此似乎全局应用于 Web 服务,而不仅仅是特定端点。
为了让事情变得更复杂,我们系统中的所有内部请求首先通过 ARR 反向代理进行路由/负载平衡。因为 ARR 提供路由,所以我更愿意通过 HTTP 保留所有内容,以避免需要 ARR 之外的单独路由机制来定位机器
如何为这种情况配置某种形式的相互身份验证?
tomcat - 从经过 Windows 身份验证的智能卡登录中获取 X509 证书
我需要使用 Tomcat 实现基于智能卡的登录的相互身份验证。
我已经按照https://nhachicha.wordpress.com/2012/01/26/mutual-authentication-with-tomcat/成功为文件系统上存在的证书配置了 Tomcat 相互身份验证
验证成功后,我还可以使用过滤器在我的 Java 代码中访问这些证书。
真实场景:
- 用户使用智能卡登录 Windows(包含 PKI 证书)
- 项目清单
- 用户从浏览器访问我的应用程序
- Tomcat 应该能够访问经过身份验证的证书以进行其相互身份验证过程
- 该证书将用于访问用户主体,该用户主体将用于 App 内的资源授权
一旦 Windows 将其用于登录(最好不要再次刷卡),有人能否阐明我如何访问智能卡证书?我需要配置 tomcat 来访问这些证书。
(一旦 tomcat 在相互验证中成功,证书将被传递并被过滤器拦截,Java Logic 可以使用它们)
ssl - 带有相互 ssl 的 restful play api
我在 Play 中有一个内置的休息 API!框架。这是在 SSL 层上。在这种情况下如何启用相互 SSL。调用我的 API 的客户端将拥有自己的公共证书。我有自己的公共证书。但我不确定在这种情况下我的 play API 如何发送证书来验证客户端。
tomcat - 当 tomcat 使用 APR/Openssl 时,让客户端证书身份验证工作的问题
我正在尝试使用 APR 将客户端证书身份验证(相互 SSL 身份验证)与 tomcat 服务器(8.0.23)一起使用。这一切都适用于使用常规基于 java 的 io 的 tomcat,但在使用本机 io(和基于 openssl 的密码)时验证客户端签名时失败。我可以使用 openssl s_client(见下文)使其失败 - 它记录 SSL 警报编号 51(我在没有帮助的情况下广泛搜索了这个)。
当我运行 openssl s_server 并将其配置为尽可能接近 tomcat 配置时,它可以工作!在这两种情况下,我都使用完全相同的 s_client 命令(只有端口不同)——所有服务器和客户端都在同一台机器上运行。
任何帮助将不胜感激。
Tomcat:8.0.23
Openssl:1.0.2a-fips 2015 年 3 月 19 日
操作系统:CentOS Linux 7(核心)
CPE 操作系统名称:cpe:/o:centos:centos:7
内核:Linux 3.10.0-229.el7.x86_64
Tomcat 连接器配置:
<Connector port="8444" protocol="HTTP/1.1"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
SSLCipherSuite="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:ECDHE-RSA-AES256-SHA384 :DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128 -GCM-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA" SSLHonorCipherOrder="true"
SSLCertificateFile="/var/keys/star_dmiapps_com.cer"
SSLCertificateChainFile="/ var/keys/star_dmiapps_com.chain.cer"
SSLCertificateKeyFile="/var/keys/star_dmiapps_com.key"
SSLPassword="xxxxxxx"
SSLVerifyClient="可选"
SSLVerifyDepth="4"
SSLCACertificateFile="/usr/local/keys/uberChain.crt"/>
s_server 命令行
openssl s_server -cert /var/keys/star_dmiapps_com.cer -cipher "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:ECDHE-RSA-AES256-SHA :ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128 -SHA" -serverpref -key /var/keys/star_dmiapps_com.key -pass pass:xxxxxxxx -CAfile /usr/local/keys/uberChain.crt -verify 4
与 tomcat 对话时 s_client 的输出:
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
verify return:1
depth=0 C = US, ST = Maryland, L = Bethesda, O = "Digital Management, Inc.", CN = .dmiapps.com
验证 return:1
140679845054368:error:1409441B:SSL routines:SSL3_READ_BYTES:tlsv1警报解密错误:s3_pkt.c:1259:SSL 警报号 51
140679845054368:错误:140790E5:SSL 例程:SSL23_WRITE:ssl 握手失败:s23_lib.c:184:
CONNECTED(00000003)
证书链
0 s:/C=US/ST =Maryland/L=Bethesda/O=Digital Management, Inc./CN=.dmiapps.com
i:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
1 s:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
i:/C=US/O=DigiCert Inc /OU=www.digicert.com/CN=DigiCert 全球根 CA
2 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert 全球根 CA
i:/C=US/O =DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
Server certificate
-----BEGIN CERTIFICATE-----
MIIFHjCCBAagAwIBAgIQA+HdMPwp8NAjvkVYy+Y4fDANBgkqhkiG9w0BAQsFADBN
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTQxMTE3MDAwMDAwWhcN
.
.
.
89v8qonrsSCd7AGtKTqf+wp6S0LT5KIbvCAq2ZnJ2O8UI1wESSwSzZsq1CMOmdl2
gOlXzAf6+sF9jWIyvB8EQYF057zNk0zKEmBs0cyBRLgnV9Zj3bZQxFt+5ZMdODCn
D8d/WE5cE70nnsqcCIiBM5du
-----结束证书-----
subject=/C=US/ST=Maryland/L=Bethesda/O=Digital Management, Inc./CN=*.dmiapps.com issuer=/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
可接受的客户端证书 CA 名称
/C=US/ST=Maryland/O=DMI/CN=DMI 中间 CA
/C=US/O=DigiCert Inc/CN=DigiCert SHA2 安全服务器 CA
/C=US/ST=Maryland/L=Bethesda/O=DMI/CN=DMI 根 CA
/C=US/O=DigiCert Inc/OU=www.digicert.com/CN =DigiCert 全球根 CA
服务器临时密钥:ECDH,prime256v1,256 位
SSL 握手已读取 4278 字节并写入 4612 字节
新,TLSv1/SSLv3,密码为 ECDHE-RSA-AES256-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-SHA384
Session-ID:
Session-ID-ctx:
Master-Key: DEEA668F36C1D567B3CA327338737E674BB89D8A117D31466DC3104E6E02C7CF8009BD41F509A17104096BCAFE95F240
Key -Arg:无
Krb5 主体:无
PSK 身份:无
PSK 身份提示:无
开始时间:1452722344
超时:300(秒)
验证返回码:0(正常)
与 s_server 交谈时 s_client 的输出
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
verify return:1
depth=0 C = US, ST = Maryland, L = Bethesda, O = "Digital Management, Inc.", CN = .dmiapps.com
验证 return:1
CONNECTED(00000003)
证书链 0 s:/C= US/ST=马里兰/L=Bethesda/O=Digital Management, Inc./CN= .dmiapps.com
i:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
1 s:/C=US /O=DigiCert Inc/CN=DigiCert SHA2 安全服务器 CA
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert 全球根 CA
2 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert 全球根 CA
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
Server certificate
-----BEGIN CERTIFICATE-----
MIIFHjCCBAagAwIBAgIQA+HdMPwp8NAjvkVYy+Y4fDANBgkqhkiG9w0BAQsFADBN
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTQxMTE3MDAwMDAwWhcN
.
.
.
89v8qonrsSCd7AGtKTqf+wp6S0LT5KIbvCAq2ZnJ2O8UI1wESswSzZsq1CMOmdl2
gOlXzAf6+sF9jWIyvB8EQYF057zNk0zKEmBs0cyBRLgnV9Zj3bZQxFt+5ZMdODCn
D8d/WE5cE70nnsqcCATE
-----END
subject=/C=US/ST=Maryland/L=Bethesda/O=Digital Management, Inc./CN=*.dmiapps.com issuer=/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
Acceptable客户端证书 CA 名称
/C=US/ST=Maryland/O=DMI/CN=DMI 中间 CA
/C=US/ST=Maryland/L=Bethesda/O=DMI/CN=DMI 根 CA
/C=US/O =DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
Server Temp Key: ECDH, prime256v1, 256 bits
SSL handshake has read 5849字节并写入 4861 字节
新,TLSv1/SSLv3,密码为 ECDHE-RSA-AES256-SHA384
服务器公钥为 2048 位
支持安全重新协商
压缩:无
扩展:无
SSL-会话:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-SHA384
Session-ID: A2978962A54C12A5EEB008A55BAD06872EA1B6BBBFCFF48C62FD026776BB0AAF
Session-ID-ctx:
Master-Key: 5D55FD5EF5B5CBDD052F2420FC0D154771F655074BDD58A23B44A20B415E0C404F1F4848E658657685FB797386C28B88
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
TLS session票证生命周期提示:300(秒)
TLS 会话票证:
0000 - 2d 07 bf e6 1e 1d c0 b4-f8 4c 3a 4d f1 c5 4d b7 -........L:M..M.
0010 - 36 c9 d6 b2 43 ae c1 ea-2c 5a 2c 81 5a 7b 0f 09 6...C...,Z,.Z{..
0020 - b0 01 66 直流 b6 d1 c7 88-7a a2 d6 38 7b 82 75 02 ..f..z..8{.u.
.
.
.
0590 - 46 b9 db b2 03 b4 4d 54-f3 27 7c 8e bf a2 44 17 F.....MT.'|...D.
05a0 - 54 e5 61 c9 f0 ea 13 aa-4d f4 84 fb b7 34 c5 b1 Ta....M....4..
api - 是否可以使用 aws api 网关进行相互身份验证?
我在 tomcat 中安装了一个应用程序,目前我在 http 上运行。我还使用 AWS API 网关来公开我的应用程序。我想在 aws api 网关和我们创建的我的 api 之间实现相互身份验证。有没有我可以参考的文件。也可以使用 AWS API 网关和我的 api 实现相互身份验证。
java - 带有 Glassfish3/4 或 Tomcat 8 和自签名证书的双向(相互)SSL
我正在尝试实现双向(相互)SSL 身份验证,但我在 Glassfish3/4 和 Tomcat 8 服务器上经常遇到以下异常(堆栈跟踪来自 Tomcat 8):
经过长时间的搜索,我只发现这个链接显示了同样的问题,但在 JBoss 上。这真的与密钥/信任库中条目的大小/数量有关吗?我现在存储了大约 66.000 个证书,但随着开发的进行,我们预计会更多(例如,数十万个)。
使用几乎空的密钥库(其中只有服务器和一个测试客户端证书),测试 SSL 连接curl
是成功的......
更新
好的,我想我发现它确实与信任库有关。这是来自的代码片段sun.security.ssl.HandshakeMessage.CertificateRequest
:
该putInt()
方法中触发了异常,因此我认为我确实存储了太多证书。我现在正在生成自签名证书,所以我必须将每个生成的证书作为服务器上的 CA 来信任客户端,这一定是问题所在。现在的问题是,有没有办法从 Java 生成非自签名的证书(例如,我可以使用 glassfish 的自签名证书作为 CA - 或者我可以)?
java - 两种方式的 SSL 数字证书身份验证在 Java 6 中失败但在 Java 7 中工作
我有一个 Java 程序连接到具有 2 路 SSL 证书身份验证的服务器。它在 Java 7 上运行良好,但在 Java 6 上失败。不幸的是,我们的系统仍在使用 Java 6。所以,我试图让它在 Java 6 上运行。
连接在 SSL 相互身份验证事务的第一步失败。那是ClientHello步骤。我们收到来自服务器的致命错误。根据我的分析,我觉得这个问题可能与不受支持的密码套件有关(即服务器不支持客户端发送的密码套件),但对此不确定。
我尝试使用System.setProperty("javax.net.debug", "ssl:handshake"); 调试问题,但调试信息指向特定问题。
我什至无法在 Java 6 中获取安全类的源代码(例如:com.sun.net.ssl.internal.ssl.* 包)来调试代码。
这是 ssl 调试日志:
如何具体解决问题?有没有办法调试 Java 6 安全代码(例如:com.sun.net.ssl.internal.ssl.* 包)?
java - 使用 client-auth 的 Java 客户端在代码中工作,但不适用于 vm-arguments
我已经使用 keytool 创建了一个用于客户端身份验证的密钥对。从这个文件中,我将公钥导出为服务器的证书以对客户端进行身份验证。
客户端设置:
将服务器证书加载到信任库文件中,并将密钥库文件用作密钥库。当我通过带有 SSLContext 的代码并使用 Apache HttpClient 加载信任库和密钥库时,客户端工作:
ssl 输出显示客户端提供证书链。使用 SoapUI 设置密钥库也可以正常工作。
我的问题:通过 vm-arguments 提供相同的信任库和密钥库(不使用 SSLContext)我看到客户端没有在 ssl 输出中显示证书链。
虚拟机参数: