Java 是否可以使用CA中的密钥库(用于签署JAR)来签署CSR以创建SSL证书

Java 是否可以使用CA中的密钥库(用于签署JAR)来签署CSR以创建SSL证书,java,ssl-certificate,keystore,keytool,jks,Java,Ssl Certificate,Keystore,Keytool,Jks,我有一个由CA提供的jks密钥库,用于对JAR进行签名。但是,我希望通过HTTPS托管一些内部应用程序,因此需要创建SSL证书,以便可以通过HTTPS对数据进行加密。但是,为了避免浏览器中出现不受信任的证书/未知主机警告,我想知道是否可以使用用于签署JAR的jks密钥库来签署我的CSR,以便创建SSL证书 到目前为止,我已经做到了以下几点: 使用JavaKeyTool生成证书和私钥对以创建JKS文件,即 keytool-genkeypair-dname“CN=******,OU=***,O=**

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

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

  • 使用JavaKeyTool生成证书和私钥对以创建JKS文件,即

    keytool-genkeypair-dname“CN=******,OU=***,O=***,L=***,ST=***,C=***”-validity 1000-别名mykeystore-keypass*****-keystore-mykeystore.jks-storepass*****

  • *将上述值替换为实际值

  • 使用JavaKeyTool创建一个CSR,并将步骤1中的JKS作为输入

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

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

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

  • 使用OpenSSL将CA PKCS转换为PEM

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

  • 使用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证书

    这可能吗?如有任何意见或建议,将不胜感激


    谢谢你吹毛求疵:颁发证书并不是签署CSR。如果您查看CSR的内容和证书的内容,它们是不同的——尽管证书中最重要的字段publickey确实来自CSR,而且主题名称也可能来自CSR

    要有效地签署/颁发证书,您必须拥有一个“中间CA”证书,其中
    BasicConstraints
    指定
    CA:true
    KeyUsage
    (如果使用,通常是)至少指定
    keyCertSign
    ,并匹配私钥。请参阅和那里的security.SX链接

    OpenSSL在发布时实际上没有强制执行这些限制(尽管它主要在验证时执行);使用PEM格式的证书和私钥文件,您可以使用带有
    -req-CA/-CAkey
    选项的
    x509
    子命令的非常基本的功能,或稍完整的
    CA
    子命令(记录在系统各自的手册页上)颁发证书(到目前为止,已编号的版本在命令下,开发“主”在man1下)

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

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


    如果涉及的CA是您所在组织的内部CA,他们可能愿意信任您签署证书(子CA)证书,只要您采取预防措施防止滥用您的子CA,这可能会危及组织的任何其他运营。如果这是像Verisign或GoDaddy这样的公共CA,向您颁发子CA证书意味着他们将把他们的整个业务交给您,因为滥用您的子CA可能会使他们停业;f或者需要从互联网上的陌生人那里得到基本建议的人,这是不会发生的。

    吹毛求疵:颁发证书并不是签署CSR。如果你看CSR的内容和证书的内容,它们是不同的——尽管证书中最重要的一个字段,公钥,确实来自CSR,而且主题不一样我可以这样做

    要有效地签署/颁发证书,您必须拥有一个“中级CA”证书,其中
    BasicConstraints
    指定
    CA:true
    KeyUsage
    (如果使用,通常是这样)至少指定
    keyCertSign
    ,并匹配私钥。请参阅和此处的security.SX链接

    OpenSSL在发布时实际上并没有强制执行这些限制(尽管它主要在验证时执行);使用PEM格式的证书和私钥文件您可以使用带有
    -req-CA/-CAkey
    选项的
    x509
    子命令的非常基本的功能,或者使用稍完整的
    CA
    子命令发布证书,该子命令记录在系统各自的手册页上(迄今为止的编号版本在命令下,开发“主命令”在man1下)

    x509-req-CA*…
    只需读取CSR,格式化具有可选有效长度和可选配置扩展名的证书(请参见手册),并使用CA密钥对其进行签名,将CA证书设置为父证书(始终为颁发者和可选AKID)。
    CA
    也会执行相同操作,提供更灵活的扩展选项