提问者:小点点

为了创建SSL证书,是否可以使用CA的密钥存储库(该密钥存储库用于对JAR进行签名)也用于对CSR进行签名


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

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

>

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

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

    *以上用实际值替换

    使用Java键工具以步骤1中的JK作为输入创建CSR

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

    使用keytool将CA JKS密钥存储转换为PKCS

    keytool-importkeystore-srcstoreType jks-srckeystore cakeystore.jks-srccalias caalias-srcstorePass*****-srckeypass*****-deststoreType pkcs12-destkeystore cakeystore.p12-destalias caalias-deststorePass*****-destkeypass*****

    使用OpenSSL将CA PKCS转换为PEM

    openssl pkcs12-输入cakeystore.p12-输出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证书

    这可能吗?任何想法或建议将非常感谢。

    谢谢


  • 共1个答案

    匿名用户

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

    若要有效地签署/颁发证书,必须有一个“中间CA”证书,其中basicconstraints指定ca:truekeyusage(如果使用,通常是这样)至少指定keycertsign,并匹配privateKey。查看如何防止假ssl证书链和security.sx链接。

    OpenSSL在发布时实际上并不强制执行这些限制(尽管它主要是在验证时强制执行这些限制);使用PEM格式的cert和privatekey文件,您可以使用x509子命令的非常基本的功能(带有-req-ca/-cakey选项)或稍微完整的ca子命令来颁发cert,这些子命令记录在您的系统或web上各自的手册页上(commands下编号为最新版本,man1下编号为development“master”)。

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

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

    如果所涉及的CA是您的组织内部的,只要您采取预防措施,防止对您的子CA的任何误用,从而危及组织的任何其他操作,他们可能愿意将证书签名(sub-CA)证书信任给您。如果这是一个公共CA,如Verisign或GoDaddy,向您颁发子CA证书意味着他们将整个业务交到您的手中,因为任何滥用您的子CA的行为都可能使他们停业;对于一个在网上需要陌生人基本建议的人来说,这是不会发生的。