【问题标题】:Is it possible to use a keystore from a CA which is used to sign JARs to also be used to sign CSRs in order to create SSL certificates是否可以使用来自 CA 的密钥库,该密钥库用于签署 JAR 也用于签署 CSR 以创建 SSL 证书
【发布时间】:2017-05-01 10:10:43
【问题描述】:

我有一个由 CA 提供的 jks 密钥库,用于签署 JAR。但是,我想通过 HTTPS 托管一些内部应用程序,因此需要创建 SSL 证书,以便可以通过 HTTPS 加密数据。但是,为了避免浏览器中出现不受信任的证书/未知主机警告,我想知道是否可以使用用于签署 JAR 的 jks 密钥库来签署我的 CSR 以创建 SSL 证书。

到目前为止,我已经设法做到以下几点:

  1. 使用java keytool生成证书和私钥对创建JKS文件,即

    keytool -genkeypair -dname "CN=****, OU=****, O=****, L=****, ST=****, C=**" -有效性 1000 -alias mykeystore -keypass ***** -keystore mykeystore.jks -storepass *****

上面的*替换为实际值

  1. 使用 java keytool 创建 CSR,并将步骤 1 中的 JKS 作为输入

    keytool -certreq -alias mykeystore -file mykeystore_csr.pem -keypass ***** -keystore mykeystore.jks -storepass *****

  2. 使用 keytool 将 CA JKS 密钥库转换为 PKCS

    keytool -importkeystore -srcstoretype jks -srckeystore cakeystore.jks -srcalias caalias -srcstorepass ***** -srckeypass ***** -deststoretype pkcs12 -destkeystore cakeystore.p12 -destalias caalias -deststorepass ***** - destkeypass *****

  3. 使用 OpenSSL 将 CA PKCS 转换为 PEM

    openssl pkcs12 -in cakeystore.p12 -out cakeystore.pem

  4. 使用 OpenSSL 将 CA PEM 转换为 CRT

    openssl x509 -outform der -in cakeystore.pem -out cakeystore.crt

此时我希望能够使用 cakeystore.pem 和/或 cakeystore.crt 来签署 mykeystore_csr.pem(来自上面的步骤 2),然后可以将其转换回 JKS 以用作CA 签署的 SSL 证书

这可能吗?任何想法或建议将不胜感激。

谢谢

【问题讨论】:

    标签: java ssl-certificate keystore keytool jks


    【解决方案1】:

    Nitpick:颁发证书不是签署 CSR。如果您查看 CSR 的内容和证书的内容,它们是不同的——尽管证书中最重要的单个字段 publickey 确实来自 CSR,并且主题名称​​可能 em> 这样做。

    有效签署/颁发证书,您必须拥有一个“中间 CA”证书,其中 BasicConstraints 指定 CA:trueKeyUsage(如果使用,通常是这样)至少指定keyCertSign,以及匹配的私钥。请参阅What prevents a fake ssl certificate chain 和那里的 security.SX 链接。

    OpenSSL 在发布时实际上并没有强制执行这些限制(尽管它主要在验证时执行);使用 PEM 格式的证书和私钥文件,您可以使用带有 -req -CA/-CAkey 选项的 x509 子命令的非常基本的功能或稍微更完整的 ca 子命令颁发证书,记录在他们各自的 man您系统上的页面or on the web(在命令下编号为迄今为止的版本,在 man1 下开发'master')。

    x509 -req -CA* ... 只是读取 CSR,格式化具有可选有效期长度和可选配置扩展名的证书(参见手册)并使用 CA 密钥对其进行签名,将 CA 证书设置为父证书(始终为颁发者和可选的 AKID) . ca 为扩展提供更灵活的选项,此外还维护一个简单的“数据库”(两个文件和一个目录),其中包含已颁发证书,可用于其他与 CA 相关的功能,如颁发 CRL 和/或 OCSP 响应(同上)。

    但是,如果您(或者更确切地说是您的任何系统)然后使用这样的证书,任何符合标准的对等方都会拒绝该证书,因为该证书是无效颁发的。根据对等方的不同,您有时可以禁用或覆盖证书检查,以便接受无效的证书,但如果您不想要安全性,您不妨一开始就关闭 SSL/TLS 以节省时间和精力。

    如果所涉及的 CA 是您组织的内部机构,他们可能愿意使用证书签名(子 CA)证书来信任您,只要您采取预防措施以防止任何可能危及任何子 CA 的滥用组织的其他业务。 OTOH,如果这是像 Verisign 或 GoDaddy 这样的公共 CA,则向您颁发子 CA 证书意味着他们将整个业务交给您,因为对您的子 CA 的任何滥用都可能使他们停业;对于那些需要互联网上陌生人的基础知识建议的人,这是不会发生的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2015-05-17
      • 2021-12-11
      • 2020-06-26
      • 2021-04-17
      相关资源
      最近更新 更多