有没有办法检查证书是客户端证书还是服务器证书?

问题描述

我收到了一个用于 ssl 连接的新密钥库 .jks 文件,以替换旧的但有效的 .jks 密钥库文件,但我收到了“意外的握手消息:serve_hello”错误。我被告知要确保密钥库包含客户端证书,所以我使用 keytool 将其证书导出到 pem 文件,然后使用 openssl 来检查目的。结果显示

证书用途: SSL 客户端:否 SSL 客户端 CA:否 SSL 服务器:是 SSL 服务器 CA:否 ...

但是,当我应用相同的过程来检查旧的但有效的 jks 文件时,我得到了相同的结果。想知道这是否是验证证书的正确方法?以及如何使用新的 jks 文件解决此握手错误

谢谢!

解决方法

extended key usage 扩展包含定义用途的 OID:

id-kp-serverAuth 对象标识符 ::= { id-kp 1 } -- TLS WWW 服务器认证 -- 可能一致的密钥使用位:digitalSignature, -- keyEncipherment 或 keyAgreement

id-kp-clientAuth 对象标识符 ::= { id-kp 2 } -- TLS WWW 客户端认证 -- 可能一致的密钥使用位:digitalSignature -- 和/或 keyAgreement https://datatracker.ietf.org/doc/html/rfc5280 第 44 页

参见:https://oidref.com/1.3.6.1.5.5.7.3.1https://oidref.com/1.3.6.1.5.5.7.3.2

在 Windows 上打开证书时,您可以在此处看到扩展名:

Client Auth Certificate

Server Auth Certificate

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...