2009-11-23 38 views
2

我必须使用带RSA的SHA-1算法使用PKCS#1填充数字签名字符串。我已经下载了Turbo Power Lockbox。使用LockBox读取PEM格式的私钥

私钥我是PEM格式,并创建使用OpenSSL:已

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -sha1 -subj 
    "/C=US/ST=CA/L=Mountain View/CN=www.mycompany.com" 
    -keyout myrsakey.pem -out c:\temp\myrsacert.pem 

这里是什么样子:

-----BEGIN RSA PRIVATE KEY----- 
MIICXAIBAAKBgQDFzvqdAEQn9MrSLTNua5SOxshV/8jQIf3qpfunBXa9SVdm4NJw 
lY7iYpwivw7EdMlBe4FmezN9LGwyIokcUSt4KUdWmA8l4Lm5rcuDzzfmlVWP7y+j 
0GKG2XCp2JwHpW4Q5WiMgcAnCMD/gbDustfz3utxQhLNBdWp2MlrEH2/rQIDAQAB 
AoGAUMZmnHohWtehgxYmLG8N6QfPgx7CWAupbop9KwUWKdGrOT2RcZwBDv0JmT6/ 
vwWZsX3Hp5ujuPfM7uQfbUrQHrcruUg/fPY8YXcWgNfOytGpaN/XKxfy2g2Cp8mE 
4yoDR2QW8jo25ZH1q1cJ3jMyX9xlXaSZm7qtaoiDydE6roECQQDxqtP2tMEZ2FmQ 
2o4T5Zv7P4II2PrLq+9IP0ASCZ2VzLxm2Pk6kxjnPjZ2oHG8pUQHvMz0m8Br3BY8 
X1BpXrj9AkEA0YpBH7qm/nbG6YjxKAL3PbxXUJ06T/ByLjfstfCrT3LxDeklfWJb 
n/V8ahRcKPLajdbKAuWvJA5NvjeJPi34cQJAZ+vD1nUIDKsiaM3zBs9X8gTvUAqu 
XmMDNJguXxNPdplh8wAevHeA3/+6v+xivHJ8/K7Nm+pWJouv7Co4k/ctqQJASV4y 
TUzKmgC2xyCG5+6Z6Ujf/b7/ouva3un//PiG0yu40ZkX4l4lHM4UwQPd/QyDj/Rs 
CTWo7GQBvp+tc1MfUQJBALnQnNOIIkvwIK+1J6iLZgh7GurbCPMrH8nSn8SxkfBe 
qq5JWo31LQAUNDW5ntG0qHZQpx6zm2MzIlt2NgOLf4s= 
-----END RSA PRIVATE KEY----- 

如果我没有记错的话,我想要使​​用的组件是TLbRSAKey。所以,我试图从文件创建密钥对象和阅读:

var 
    mPrivateKey: TLbRSAKey; 
begin 
    mPrivateKey := TLbRSAKey.Create(aks1024); 
    mPrivateKey.LoadFromFile('C:\temp\myrsakey.pem'); 

在LoadFromFile我得到一个“无效的RSA密钥”的错误。我究竟做错了什么? Lockbox是否支持PEM格式的密钥?没有一个例子说明;一切似乎是在ASN格式

+0

刚刚[自行车脱落(http://bikeshed.com/),但*“CN = www.mycompany.com“*是以前的做法。即使您使用自己的CA签名(即,它不是自签名的),它今天也会导致很多问题。请参阅[如何使用openssl创建自签名证书?](http://stackoverflow.com/q/10175812/608639)。重点使用主题备用名称(而不是它的自签名部分)。 – jww 2015-05-07 20:06:41

回答

3

我不是delphi程序员,但我想我会尝试提供一些指针。

首先,确保为您的真实应用程序生成新的私钥。现在你已经与我们分享了你的私钥,我们不希望任何开放的安全漏洞。

其次,使用来自OpenSSL的DER输出生成ASN.1格式。 PEM格式只是二进制ASN.1结构的base-64编码(并且添加了标记)。

你可以回去DER两种方法之一:

1)您可以分析和基础-64在PEM信封数据进行解码。为此,只需对-----BEGIN/END RSA PRIVATE KEY-----标记之间的数据进行解码即可。

或者,因为你反正...创建一个新的密钥;)

2)您可以使用-outform DER说法,当你使用OpenSSL生成密钥。

我不确定这会适用于您的应用程序,但也许它会帮助您进一步。

TIP转换一个PEM provate关键DER格式,请使用OpenSSL中rsa实用程序:

openssl rsa -inform PEM -outform DER -in privkey.pem -out privkey.der 
+0

这有帮助。我想我已经断开了数据的格式。我做了你在(2)中所说的,即添加-outform DER参数。它生成了证书和密钥。证书似乎是正确的,我可以在Windows中双击它,它包含所有的信息。但私钥仍然以Base64标记出现。我也尝试了-keyform DER参数,但得到相同的结果。 – 2009-11-23 04:20:25

+1

不幸的是,我不认为有一种方法可以直接创建DER格式的私钥。相反,我添加了一个将您的私钥转换为DER格式的提示。 – jheddings 2009-11-23 06:42:06

+0

好吧 - 我已经成功地将我的私钥转换为DER格式,根据jheddings(我更新了我的问题以反映这一点)。但现在我得到一个零误差的分割。 jheddings - 谢谢,但我认为这是它转向Delphi的东西。 – 2009-11-23 12:48:13