【问题标题】:How to insert public key and hash signature generated in smart card in a CSR with openssl API's如何使用 openssl API 在 CSR 中插入智能卡中生成的公钥和哈希签名
【发布时间】:2013-05-05 11:41:55
【问题描述】:

1)我在 openssl 命令的帮助下生成一个密钥文件和一个 CSR。 当使用命令“openssl req -in test_csr.pem -noout –text”显示 CSR 信息时,我得到以下打印结果:

Certificate Request:
Data:
    Version: 0 (0x0)
    Subject: C=GB, O=Test
    Subject Public Key Info:
        Public Key Algorithm: rsaEncryption
        RSA Public Key: (2048 bit)
            Modulus (2048 bit):
                00:a6:af:51:e9:23:65:50:27:14:83:f5:c8:11:10:
                b1:03:0b:c7:0d:2d:ae:09:81:d9:f8:31:ad:8e:d7:
                8e:65:a8:e0:d4:b4:7e:f9:3e:99:fa:b0:43:5d:e0:
                41:7a:ee:9f:90:3d:05:c0:6f:80:bb:bb:9e:dd:64:
                1e:15:89:0c:bc:e6:3d:76:4e:d0:ef:5c:e4:de:34:
                00:d0:ac:5c:e4:f8:73:b7:22:12:81:30:28:85:cd:
                5a:bb:d6:28:c3:dc:01:67:f5:56:3a:3f:01:f3:d7:
                8f:d9:19:67:90:1e:23:24:b0:58:e9:80:44:c9:36:
                ae:2b:c3:81:a3:ce:de:af:8b:32:33:7d:f7:81:d7:
                80:b8:d2:97:ce:8b:f3:21:2b:e8:e2:96:d0:b1:3f:
                cc:dc:18:18:c1:e7:99:81:2a:e9:45:20:b7:80:39:
                b3:5d:b3:ab:61:6a:61:f3:e1:7c:32:b7:a8:29:1a:
                b2:e1:02:81:42:1f:b4:c3:7f:bf:21:f6:2d:4f:ec:
                19:d4:3a:d4:bf:90:8a:3b:f0:24:cf:83:1b:21:ab:
                b2:cb:15:38:f2:ac:1d:80:ba:33:2b:c8:f4:8d:52:
                90:7a:25:2b:e5:08:68:a2:f2:84:61:2f:24:48:a9:
                25:97:85:28:64:52:f9:15:91:eb:36:c6:d9:98:08:
                09:d3
            Exponent: 65537 (0x10001)
    Attributes:
        a0:00

现在,当我使用十六进制编辑器编辑 DER 格式的密钥文件时,我得到以下数据

30 82 01 22 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 82 01 0F 00 30 82 01 0A 02 82 01 01 00 A6 AF 51 E9 23 65 50 27 14 C 31 B1 03 0B C7 0D 2D AE 09 81 D9 F8 31 AD 8E D7 8E 65 A8 E0 D4 B4 7E F9 3E 99 FA B0 43 5D E0 41 7A EE 9F 90 3D 05 C0 6F 80 BB BB 9E DD 64 1E 15 89 0C E6 3D 76 4E D0 EF 5C E4 DE 34 00 D0 AC 5C E4 F8 73 B7 22 12 81 30 28 85 CD 5A BB D6 28 C3 DC 01 67 F5 56 3A 3F 01 F3 D7 8F D9 19 67 90 1E 23 24 B0 58 E9 80 44 C9 36 AE 2B C3 81 A3 CE DE AF 8B 32 33 7D F7 81 D7 80 B8 D2 97 CE 8B F3 21 2B E8 E2 96 D0 B1 3F CC DC 18 18 C1 E7 99 81 2A E9 45 20 B7 80 39 B3 5D B3 AB 61 6A 61 F3 E1 7C 32 B7 A8 29 1A B2 E1 02 81 42 1F B4 C3 7F BF 21 F6 2D 4F EC 19 D4 3A D4 BF 90 8A 3B F0 24 CF 83 1B 21 AB B2 CB 15 38 F2 AC 1D 80 BA 33 2B C8 F4 8D 52 90 7A 25 2B E5 08 68 A2 F2 84 61 2F 24 48 A9 25 97 85 28 64 52 F9 15 91 EB 36 C6 D9 98 08 09 D3 02

03 01 00 01 >

我观察到除了上一步中显示的密钥(从字节 33 开始)之外,在密钥之前(第 32 个字节)和密钥之后(最后 5 个字节)还有额外的数据。 有人知道额外信息来自哪里以及如何解密吗?

2)我必须测试一个配置,其中密钥对(私有和公共)和哈希签名是在供应商 API 的帮助下在智能卡中生成的。使用第一个 API,我从智能卡中获取公钥和长度。使用第二个 API,我可以获得哈希签名数据和长度。 我猜可以使用 openssl X509_REQ_set_pubkey API 将公钥插入到 CSR 中(对吗?)。 问题是:是否有一个现有的 openssl API 我可以用来在 CSR 中插入散列签名(类似于 X509_REQ_sign 但没有智能卡已经完成的散列和签名过程)。 谢谢。 PL.

【问题讨论】:

    标签: csr


    【解决方案1】:

    前 256 个字节应该是描述证书所有者(主题、算法等)的结构。 最后 5 个字节是 RSA 公共指数 - ASN.1 编码中的 65537。 要获取更多信息,请使用 ASN.1 解码器(或 openssl asn1parse 命令)。

    很遗憾我不知道OpenSSL上有这样的功能,也没有时间深入研究它们的来源,但至少可以手动形成CSR ASN.1结构,这并不难。

    【讨论】:

    • 您能否推荐一个很好的参考资料,其中清楚地解释了 CSR ASN.1 结构(在深入研究代码之前)?
    • 这是 PKCS#10/RFC 2986。此外,您还需要阅读一些关于 DER 的文本(也很简单 - 标签 + 长度 + 数据)。
    猜你喜欢
    • 1970-01-01
    • 2013-05-24
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2017-03-07
    • 2019-06-05
    相关资源
    最近更新 更多