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

如何使用openssl API在CSR中插入智能卡中生成的公钥和哈希签名

微生新翰
2023-03-14

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 F 00 30 82 01 A 02 82 01 01 00 A6 AF 51 E9 23 65 50 27 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 9E DD 64 1E 15 89 0C BC E6 3D 76 4E D0 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 3A3F 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 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 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 F284 61 2F 24 48 A9 25 97 85 28 64 52 F9 15 91 EB 36 C6 D9 98 08 09 D3 02 01

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

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

共有1个答案

董良策
2023-03-14

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

不幸的是,我不知道OpenSSL上的此类函数,也没有时间深入了解它们的源代码,但至少可以形成CSR ASN。1手动构造,这并不难。

 类似资料:
  • 我正在使用openssl命令创建一个CSR,它使用椭圆曲线secp384r1和哈希算法sha384签名: OpenSSL EC param-out EC _ client _ key . PEM-name secp 384 r 1-genkey openssl req-new-key是ec_client_key。pem-out ec_ clientReq.pem 然后,我使用以下命令以可读格式显示

  • 我想获取一个SHA256散列,并使用Bouncy Castle(实际上是海绵城堡)生成一个密钥。在下面的代码摘录中,retval是SHA256Digest(字节数组)返回的值,finalKey应该是从SHA256哈希生成的键。 当我尝试运行代码时,我得到的消息是“Encoded key spec not recognized”,因此我认为retval应该采用某种特定的格式,并且我不能像现在这样直接

  • 我知道可以使用此链接为OpenSSL中的自签名证书生成一个公钥和一个私钥。但是对于给定的公钥,我有没有可能算出对应的私钥呢?我一直在使用1024位的RSA公钥。

  • 我正在将一个web应用程序从Ruby移植到Java,并希望允许用户在不重置密码的情况下登录。下面是使用pbkdf2 gem生成哈希的Ruby代码: 读取Ruby gem的源代码时,它使用openssl::digest.new(“sha256”)作为默认散列函数,并生成一个32字节的值,该值使用“unpack(”h*“)”转换为一个64字符串。 所以,在Java,我尝试了以下几种方法: 使用pass

  • 我试图使用Datastax驱动程序将作为<code>int、time、hash</code>提供的值存储到Cassandra中。 哈希显示为< code>{ "Q17.1_4"= 已将表定义为: 整数 时间戳 地图 PK(int,时间戳) 我可以把PK插入ok,但是我很难把哈希值强制转换成Cassandra可以处理的东西。 创建了一个准备好的语句,并在(尝试)遍历值时使用它: 如果我将“val”作

  • 问题内容: 如何编写此代码?我已经拥有了,我需要通过单击按钮将相应的md5哈希发送到服务器。 问题答案: 您可以使用crypto-js。 我也建议使用SHA256,而不是MD5。 要通过NPM安装crypto-js: 或者,您可以使用CDN并引用JS文件。 然后,要显示MD5和SHA256哈希,可以执行以下操作: 此处的工作示例JSFiddle 还有其他一些JS函数会生成哈希,如下所述。 http