【问题标题】:Extract requested validity period from a Certificate Signing Request using OpenSSL使用 OpenSSL 从证书签名请求中提取请求的有效期
【发布时间】:2010-10-17 19:15:51
【问题描述】:

我们使用由 OpenSSL 提供支持的私有证书颁发机构来验证我们的客户。我们提供了一个简单的基于 Web 的实用程序,允许他们上传 CSR 文件供证书颁发机构签名。

目前,我们只能颁发固定期限的证书,目前是 365 天。但是,我们的客户询问他们是否可以指定证书的有效期。

我宁愿不必询问用户他们想要什么有效期,因为他们必须在生成 CSR 时指定有效期,并且在签署证书时从 CSR 中提取该有效期是有意义的。但是我不知道该怎么做:OpenSSL 让您调试 CSR、证书和密钥的正常操作不会显示相关信息:这是“openssl req -text -noout

$ openssl req -text -noout < my.csr 
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=GB, L=London, O=example.com, CN=customer/emailAddress=ssl@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:c4:3b:11:7f:61:31:19:97:b6:26:19:01:e7:c6:
                    c3:d5:03:a5:f6:5a:4d:e2:03:d0:4e:76:49:d0:7f:
                    59:92:bf:5e:12:b3:b0:7e:20:5b:d8:a2:3f:cb:50:
                    c1:64:e5:48:04:c3:b2:04:e3:f2:4c:2f:0e:e2:a6:
                    c3:7c:36:24:dc:97:c9:f0:ba:ad:87:0f:71:45:9c:
                    6a:7f:d4:4c:d5:31:8e:49:a8:e4:3d:c4:ec:5e:54:
                    bf:f9:ba:ce:21:4c:11:15:7d:f0:d3:7a:77:f6:66:
                    5d:07:4e:4a:d3:0e:f0:52:0d:d9:cf:81:86:fe:9b:
                    c8:f8:e4:8d:d6:d1:d0:85:7f
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha1WithRSAEncryption
        5e:4c:38:59:95:e5:11:b4:a3:d5:88:1f:3c:c0:33:67:cb:b2:
        14:85:73:c3:5a:b8:23:bf:1d:25:2b:a9:38:93:da:fb:67:17:
        26:6c:79:07:dd:7f:3c:3f:b0:33:17:d1:c2:41:f7:c9:ce:1e:
        32:1c:a1:a0:a3:50:67:56:1b:58:d9:b4:48:56:70:00:43:22:
        a9:0c:17:be:67:42:f4:98:d6:d8:c0:d0:4f:6a:73:d1:a8:57:
        91:3c:02:dc:dc:8f:e3:fb:48:28:06:a2:8e:8e:27:b2:39:d7:
        3e:ce:63:ae:66:9b:ec:38:ee:09:77:dc:0f:91:40:ab:28:0f:
        ae:a9

在任何地方都没有提及请求的有效期。

有什么建议吗?

【问题讨论】:

    标签: ssl openssl


    【解决方案1】:

    尝试在您的请求创建命令中添加-days xx 参数

    【讨论】:

    • Dmitry:您的评论并没有完全回答我的问题:我已经知道如何在生成 CSR 时使用 -days,以及在颁发证书时如何使用它。我想知道的是如何提取生成 CSR 时使用的 -days 的值。
    【解决方案2】:

    我一直试图弄清楚如何请求 CSR 中的特定有效期,据我所知,CSR 根本不包含该信息。 CSR 的结构在 PKCS#10 / RFC2986 中定义,它没有专门用于请求有效期的字段。可以放入 CSR 的属性和扩展在 PKCS#9 中列出,并且没有关于有效期的内容。最后,我可以在生成的 CSR 上执行 openssl asn1parse 并发现无论我将什么传递给 openssl req,都没有包含与有效期相关的信息。

    【讨论】:

    • 我有一个自签名 CA,通过向签名命令提供 -days 3650 参数,我可以设置生成证书的有效性。类似于openssl ca -policy policy_anything -out newcert.pem -days 3650 -infiles newreq.pem
    【解决方案3】:

    虽然您为证书申请了一定的有效期,但在生成 CSR 时,不确定 CA 是否可以接受该有效期。大多数 CA 更喜欢预定义的有效期,很少有 CA 可以接受请求的有效期并相应地生成 CSR。现在说到重点,根据 PKCS#10 标准的 CSR ASN.1 结构没有指定有效期。因此,您无法从 CSR 中提取该信息。

    【讨论】:

      【解决方案4】:

      我在研究 CSR 的有效性时偶然发现了您的问题。正如其他人所提到的,有效期不包含在 CSR 中,但我很好奇 -days 很多人在创建 CSR 的示例中包含的选项。看完documentation of OpenSSL就很清楚了:

      -天数

      当使用 -x509 选项时,这指定了认证证书的天数。默认为 30 天。

      -x509 选项输出自签名证书而不是证书请求

      -x509

      此选项输出自签名证书而不是证书请求。这通常用于生成测试证书或自签名根 CA。添加到证书的扩展名(如果有)在配置文件中指定。除非使用 set_serial 选项指定,否则将使用较大的随机数作为序列号。

      【讨论】:

        猜你喜欢
        • 2014-08-23
        • 2015-07-29
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 2012-08-21
        • 2012-04-06
        • 2012-03-27
        相关资源
        最近更新 更多