1

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

4

1 回答 1

1

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

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

  • CA 根密钥和相应的自签名证书。
  • 由 CA 根密钥签名的中间 CA 密钥和证书(这是可选的)。
  • 由中间 CA 或 CA 根签名的服务器身份密钥和证书。
  • 由服务器信任的某个 CA 签名的客户端身份密钥和证书。对于您的学术工作,您可能希望此 CA 与您创建的 CA 相同。仅当您希望拥有 2 路(双向)SSL 时才需要客户端身份,其中服务器对客户端进行身份验证。

在 Tomcat 之类的东西上运行的 Web 服务,可以为 SSL 配置。在服务器端,身份将指向服务器密钥证书。对于 2-way SSL,服务器上还会有一个受信任 CA 证书的列表或密钥库。除非客户端的证书由这些受信任的 CA 之一签名,否则服务器将不允许客户端连接。

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

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

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

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

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

于 2013-11-01T21:45:34.710 回答