微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从签名证书创建信任库和密钥库?

如何解决如何从签名证书创建信任库和密钥库?

我有一个 Java 服务,需要在其上启用 TLS。我已经生成一个 csr 请求,现在已经与公司的 CA 签署了它。所以,我现在有 server.csrservice.crt 文件。如何从中创建信任库和密钥库?谢谢。

解决方法

Java TLS (JSSE) 服务器需要私钥和证书,或者如果您更喜欢证书和私钥,则需要通过 KeyManager 对象来标识自身。如果它使用选项来请求或要求客户端身份验证(也称为客户端证书或双向或双向身份验证,这种情况很少见),则它只需要 TrustManager 中的证书来验证 客户端 ;它从不需要在 TrustManager 中拥有自己的证书。但是,根据使用的证书,客户端(可能不是 Java)可能需要服务器证书的 CA 证书,或者在极少数情况下服务器证书本身,添加到 他们的信任库。 尽管存在其他选项/方法,但 KeyManager 对象和 TrustManager 对象(如果使用)通常是通过读取密钥库和(可能)信任库文件来创建的。

为服务器创建这样的密钥库文件有两种主要方法,其变化部分取决于您是否使用 CA,如果使用,使用哪种以及如何使用。两者都是通过生成密钥对(私有公共)然后获取公共部分的证书来工作的;这可以是虚拟/自签名证书或来自 CA,在后一种情况下,几乎总是通过创建 CSR(证书签名请求),将此 CSR 提交给 CA,并获得至少返回请求的最终实体或“叶”证书。现在几乎在所有情况下,CA 颁发的正确验证证书至少需要一个(有时更多)“中间”或“链”证书,这些证书也需要在服务器密钥库中配置; CA 可以使用多种格式和方法来提供此(这些)链证书,并且没有单一标准。

方法A是使用Java keytool -genkeypair创建已经in密钥库中的密钥对,然后keytool -certreq为它创建一个CSR,并且当证书带有链(如果适用),将这个“回复”导入同一个密钥库,将它与已经存在的私钥结合起来。根据叶和链证书使用的格式,存在变化;基本上,您要么从上到下分别导入证书,以叶子结尾,要么一次导入整个链。如果这是您创建您使用的 CSR 的方式,您应该查看您的“crt”文件以查看它是什么格式以及其中包含哪些数据——如果它是 PEM 格式(其中 jhas 可打印字符块主要是字母和-----BEGIN/END {something}----- 形式的带有标题和结尾行的数字查看是否有一个或多个块以及{something}(s) 是什么,以及是否有任何相关的“评论”信息外部由 BEGIN/END 行形成的块。

方法 B 是使用其他东西,最常见的是 OpenSSL,但也有其他工具来生成密钥对(私钥)和 CSR,然后以相同的方式使用它来获取证书。然后,您可以使用 OpenSSL 将私钥和证书组合到一个 PKCS12 文件中,该文件一个 Java 密钥库,假设您的文件都是 PEM 格式; OpenSSL 生成的私钥始终是,并且证书通常可以或可以轻松转换。如果您正在处理旧版本的 Java 或无法轻松处理 PKCS12 的 Java 程序,则可以使用 keytool -importkeystore 将 PKCS12 转换为 JKS,这是 Java 最初和“传统”使用的格式。

作为任一变体,您可以使用 https://keystore-explorer.org(基于 GUI 的 Java 程序)直接在密钥库(如 keytool)中/从密钥库创建密钥对和 CSR,然后导入 CA - 颁发并链接证书,或者将 OpenSSL 生成的私钥和 CA 颁发并链接的证书一起导入密钥库。

所有这些方法(我很确定所有变体)都已包含在现有 Qs 中,正如评论的那样,但是自签名的 As for self-signed(在进行开发时通常更简单,这是 StackOverflow 的主题)倾向于数量更多,因此需要花费一些精力才能找到有关 CA 颁发的 As(或 Q),以及您想要的特定方法和可能的变体。试图涵盖所有可能的情况,而不知道您实际需要哪些情况,可能需要数周或数月的时间。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。