2013-05-05 45 views
2

1)我在openssl命令的幫助下生成密鑰文件和CSR。 當顯示與命令的CSR信息爲「OpenSSL REQ -in test_csr.pem -noout -text」我得到以下印刷:如何使用openssl API將智能卡中生成的公鑰和散列簽名插入到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 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 1 2 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,但沒有已由智能卡完成的散列和簽名過程)。 謝謝。 P.L.

回答

1

第256個字節應該是描述證書擁有者(Subject,算法等)的結構。 最後5個字節是RSA公開指數 - ASN.1編碼中的65537。 要獲取更多信息,請使用ASN.1解碼器(或openssl asn1parse命令)。

不幸的是,我不知道OpenSSL上的這種功能,沒有時間挖掘它們的源代碼,但至少可以手動形成CSR ASN.1結構,這並不困難。

+0

您可以推薦一個很好的參考,其中明確解釋CSR ASN.1結構(在挖掘代碼之前)? – Gaston 2013-05-06 12:36:53

+0

這是PKCS#10/RFC 2986.您還需要閱讀一些關於DER的文本(它也很簡單 - 標記+長度+數據)。 – 2013-05-06 13:33:47