Java - 通信器中的公钥基础设施实现

标签 java cryptography pki

我的任务是编写一个带有 PKI 的通信器。我考虑 X.509 证书的实现(在 Java 中) - 我的意思是 SSL/TLS 允许数据/消息 secret 性,以及消息验证代码以保证消息完整性。所有这些我都在一些文献中读过,而且都是理论性的。我不确定我的想法是否正确。任何人都可以很好地理解 PKI 的概念,给我任何建议(例如,它很好地解释了 PKI 实现的网站)?

最佳答案

正如 ntoskrnl 评论的那样,即使是专家,也很难做到完全正确。

以下是 SSL 连接所需的 PKI 的基本高级 View :

  • CA 根 key 和相应的自签名证书。
  • 由 CA 根 key 签名的中间 CA key 和证书(此 是可选的)。
  • 由以下任一者签署的服务器身份 key 和证书 中间 CA 或 CA 根。
  • 由服务器信任的某个 CA 签名的客户端身份 key 和证书。为您 学术工作时,您可能希望此 CA 与您创建的 CA 相同。仅当您想要使用 2 路(相互)SSL(其中服务器对客户端进行身份验证)时才需要客户端身份。

在 Tomcat 等可配置 SSL 的设备上运行的 Web 服务。在服务器端,身份将指向服务器 key 证书。对于 2 向 SSL,服务器上还会有受信任 CA 证书的列表或 keystore 。除非客户端的证书由这些受信任的 CA 之一签名,否则服务器将不允许客户端连接。

在客户端,您还需要受信任的 CA 证书的列表或 keystore ,并且服务器的证书必须由这些 CA 之一签名。 Java 在建立 SSL 连接时将使用客户端 ID key 以及证书和信任 keystore 。如果您搜索 Stack Overflow,您应该会找到大量 Java SSL 连接示例。

要创建 PKI,OpenSSL 是一个很好的工具。这是一个有用的网站:

https://pki-tutorial.readthedocs.org/en/latest/simple/index.html

对于 key 及其相应的证书,您首先创建私钥,然后创建证书签名请求 (CSR)。然后,CSR 由 CA key 签名,并成为证书。该证书包含与用于创建 CSR 的私钥相对应的公钥。

对于 MAC,这里有一个 HMAC 的 Java 示例:HMAC-SHA1: How to do it properly in Java?

关于Java - 通信器中的公钥基础设施实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19710794/

相关文章:

java - 如何解密密文分区 - AES、Java

java - X.509 证书的序列号

cryptography - Shamir secret 共享和拉格朗日插值 (OpenSSL BIGNUM)

java - 验证失败后移动文件 (Java)

java - 如何使用 Volley 从 Json 获取类别和子类别数据

java - 如何使 jtextfield 只接受 netbeans 中的字符

.net - 可以将 RSA 私钥+公钥转换为 .pfx 文件吗?

c# - 加密库?

ios - 从 iOS App 访问(开发或分发)证书

java - 将带有 JavaFX 组件的 Swing 应用程序打包到可执行 JAR 中