2009-11-23 4 views
2

Je dois signer numériquement une chaîne en utilisant l'algorithme SHA-1 avec RSA en utilisant le remplissage PKCS # 1. J'ai téléchargé Turbo Power Lockbox.Lecture de la clé privée au format PEM avec LockBox

La clé privée que j'ai est au format PEM et a été créé en utilisant 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 

Voici à quoi il ressemble:

-----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----- 

Si je ne me trompe pas, le composant que je veux utiliser est TLbRSAKey. J'ai donc essayé de créer un objet clé et de le lire à partir du fichier:

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

Sur le LoadFromFile j'obtiens une erreur « non valide RSA Key ». Qu'est-ce que je fais mal? Est-ce que Lockbox supporte les clés au format PEM? Aucun des exemples n'illustre; tout semble être au format ASN

+0

Juste [effusion de vélo] (http://bikeshed.com/), mais * "CN = www.mycompany.com "* est l'ancienne façon de le faire. Il peut causer beaucoup de problèmes aujourd'hui, même si vous le signez avec votre propre CA (c'est-à-dire, ce n'est pas autosigné). Voir [Comment créer un certificat auto-signé avec openssl?] (Http://stackoverflow.com/q/10175812/608639). Concentrez-vous sur l'utilisation des noms alternatifs du sujet (et non sur la partie auto-signée). – jww

Répondre

3

Je ne suis pas un programmeur Delphi, mais j'ai pensé que j'essaierais de fournir quelques pointeurs. Tout d'abord, assurez-vous de générer une nouvelle clé privée pour votre application réelle. Maintenant que vous avez partagé votre clé privée avec nous, nous ne voulons pas de failles de sécurité ouvertes.

Deuxièmement, le format ASN.1 est généré en utilisant la sortie DER d'OpenSSL. Le format PEM est juste le codage en base 64 de la structure ASN.1 binaire (et les marqueurs sont ajoutés).

Vous pouvez revenir à DER dans l'une des deux façons suivantes:

1) Vous pouvez analyser et décoder la base de données 64 dans l'enveloppe PEM. Pour ce faire, il suffit de décoder les données entre les marqueurs -----BEGIN/END RSA PRIVATE KEY-----.

Ou, puisque vous créez une nouvelle clé de toute façon ...;)

2) Vous pouvez utiliser l'argument -outform DER lorsque vous générez votre clé à l'aide OpenSSL.

Je ne suis pas certain que cela fonctionnera pour votre application, mais peut-être que cela vous aidera à aller un peu plus loin.

TIP pour convertir une clé provate PEM au format DER, utilisez l'utilitaire rsa dans OpenSSL:

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

Cela aide. Je pensais que j'avais une déconnexion dans le format des données. J'ai fait ce que vous avez dit dans (2), c'est-à-dire ajouter l'argument -outform DER. Il a généré le certificat et la clé. Le certificat semble correct et je peux double-cliquer dessus dans Windows et il contient toutes les informations. Mais la clé privée sort toujours en Base64 avec les marqueurs. J'ai aussi essayé l'argument -keyform DER mais je suis pareil. –

+1

Malheureusement, je ne pense pas qu'il existe un moyen de créer des clés privées au format DER directement.Au lieu de cela, j'ai ajouté un conseil pour convertir votre clé privée au format DER. – jheddings

+0

Ok - J'ai réussi à convertir ma clé privée au format DER selon jheddings (j'ai mis à jour ma question pour refléter cela). Mais maintenant, je reçois une division par erreur zéro. jheddings - merci, mais je pense que c'est là que ça se passe à Delphi. –

Questions connexes