我已经开始了一个基于java客户端服务器通信的项目。我正在做的是客户端和服务器有自己的自签名证书。在初始通信中,客户端和服务器将交换其证书。服务器必须验证客户端证书并应授予身份验证。我震惊的是什么主题服务器可以验证或无效特定的客户端..?我无法从这里继续。那么请问你们中的任何人都可以对此进行简要解释吗?如果可能的话,java中的一些伪代码..?
最佳答案
自签名证书无法通过正常的 PKI 方法进行验证 - 即,检查证书链是否位于信任 anchor 上,是否在 CRL 上等。
使用自签名证书时,初始配置通常涉及使用带外机制来交换证书和指纹以验证它们。然后可以将这些证书添加到受信任的存储中并由您的应用程序使用。当然,每次更新任何自签名证书时都需要重复此带外过程。对于一些需要安全通信的应用程序来说,这种方法可能没问题,但很明显,自签名证书方法无法扩展。
另一种方法是使用 openssl 包装器 CA.pl 之类的东西设置一个迷你 CA 并颁发客户端证书。然后,这些颁发的证书将全部链接到一个根。该根仍然必须安全地传递给所有依赖方,但根 CA 颁发的其他证书则不需要这样做。
更新:(回答下面评论中的问题)
以下是获取证书指纹的几种方法:
- 使用 openssl:openssl x509 -sha1 -in cert.pem -noout -fingerprint
- 在 Windows 上将其保存为 .cer 文件,然后双击它,然后转到详细信息选项卡
- 使用此工具:online cert decoder
为了进一步提高安全性,证书所有者可以使用与证书检查器不同的工具。
关于java - 基于自签名证书的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2773350/