当前位置: 首页 > 知识库问答 >
问题:

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

孙梓
2023-03-14

我有一个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个答案

    百里智勇
    2023-03-14

    吹毛求疵:颁发证书并不是签署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的行为都可能使他们停业;对于一个在网上需要陌生人基本建议的人来说,这是不会发生的。

     类似资料:
    • <代码>java。安全KeyStore使用KeyStoreSpi实现来提供不同类型的KeyStore。基本OpenJDK支持JKS、JCEKS和PKCS12密钥库类型。前两个实现专有的Sun/Oracle格式,PKCS12是一个公共标准。 我知道JCEKS确实支持对称密钥,PKCS12则不支持。还有哪些实现(如Bouncy Castle)支持对称密钥?开发人员似乎想隐藏此类信息。E、 g.Boun

    • 在Google Play控制台中,您可以上传加密的应用程序签名密钥,将现有应用程序转换为使用Google managed应用程序签名:https://support.Google.com/googleplay/android-developer/answer/9842756?hl=en#zippy=%2Cexisting-apps 提供了3种不同的方法,它们都产生相同的加密密钥,但从不同类型的输入

    • 我想在客户端设备上使用通过Ed25519生成的私钥对JWS(json web签名)进行签名。然后将这个签名发送到我的后端,并用公钥验证它。为了熟悉这个过程,我想尝试在node js中对JWS进行签名和验证 我的私钥和公钥都已生成,可以在base58中使用。这是我目前使用Ed25519私钥签署JWT的尝试: 密钥必须是KeyObject或CryptoKey类型之一。收到一个Uint8Array的实例

    • HTTP/REST-需要对代码/token/etc进行身份验证,以便将数据传递到keyvault,以便keyvault将使用密钥库中的密钥对数据进行签名。 Azure有很多文档介绍如何注册我的应用程序,在密钥库中为它创建凭据,然后通过OATH2对它进行身份验证(第一步是通过REST获得代码(然后是令牌?)),我一直被重定向登录。 我是不是漏掉了什么?我希望我的python脚本在无人值守的情况下运行

    • 我只使用自签名证书进行测试。 问题: Q1.我想知道为什么我需要在步骤6中将服务器和客户端自己的证书添加到各自的信任库中。 2.创建x509证书 openssl req-x509-new-nodes-key diagserverca.key-sha256-days 1024-out diagserverca.pem 3.从私钥和公共证书创建PKCS12密钥存储库。 keytool-importke