java - 基于自签名证书的身份验证

标签 java security certificate

我已经开始了一个基于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/

相关文章:

java - Clojure REPL 未在 Windows 命令提示符下启动

java - 如果我关闭对话框,则会发生 NullPointerException。我该如何摆脱它?

python - 如何chroot Django

certificate - 从系统钥匙串(keychain)中删除 Apple 全局开发者关系证书颁发机构

iOS - 以编程方式信任 CA(证书颁发机构)

java - 如何在 C# 中使用证书文件验证签名值?

java - 如何将 Android Gradle 应用程序打包到 *.jar 或 *.aar 文件

java - EJB 2.0 和 EJB 3.0 在对象方向上的主要区别是什么

c++ - 网络游戏作弊: Is it possible to prevent one Win32 process from inspecting/manipulating another's memory?

ruby-on-rails - 正则表达式攻击向量?