web-dev-qa-db-fra.com

CSR avec seulement la clé publique avec OpenSSL

J'ai donc fait mes recherches et je n'ai rien trouvé assez spécifique à mon problème. En tant que Titre de la question, je souhaite faire une RSE avec seulement la clé publique. Ce que j'ai pu faire, c'est générer une RSE avec les informations de mon choix avec un nouveau clavier. Puis utilisez quelque chose comme ça pour le forcer à utiliser la clé publique que je veux lorsque vous faites le certificat.

openssl x509 -req -in mycsr.pem -force_pubkey mypubkey.pem -CA dumyCA.pem -CAkey -dumyCA.pem -out mycert.pem

Après cela, je prends le certificat sorti et modifie ses attributs pour l'associer à une clé privée. Tout cela fonctionne bien. Le problème avec ceci est que si je devais emprunter ladite RSE, et soumettez-la à un CA, ils me reviendront un certificat qui a utilisé la clé générée lorsque la RSE génère. Ainsi ma question.

Edit: Donc, j'ai une paire de clé, mais ma clé privée est sur un module HSM qui n'a pas de capacités d'exportation. Je suis capable d'obtenir un fichier .pem de la clé publique. Et après avoir effectué le certificat avec la commande, j'ai donné que je l'exécute à travers un programme qui l'associe avec la clé privée. Donc, ma nouvelle question est, à l'aide d'OpenSSL API, vais-je créer mon propre RSE? Donc, je peux le signer avec la clé privée sans avoir à l'avoir dans un fichier et l'associer à la clé publique que j'ai.

3
embasa

La demande de signature du certificat, générée par la commande:

openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key

comprendra votre clé publique. Ceci est obligatoire selon le processus PKI. Le RSE, contenant vos informations d'entité et la clé publique est envoyé à toute autorité de certification que vous aimez pour une demande de certificat (d'où le nom de la RSE). La CSR est signée à l'aide de la clé privée liée à la clé publique intégrée.

L'AC, après avoir évalué votre identité, signera essentiellement la CSR pour créer un certificat valide pour vous. Ceci est le certificat que vous enverrez aux clients, par exemple. quand ils se connectent à votre site web.

La clé privée de votre privateKey.key Fichier sera utilisé par votre serveur Web pour déchiffrer les messages envoyés. Cette clé privée ne devrait jamais, jamais quitter le serveur.

Vous pouvez vérifier les commandes openssl les pour plus d'informations.

3
M'vy

Malheureusement, un moyen d'utiliser la clé privée est en fait nécessaire pour créer une demande de signature de certificat. Comme vous parlez d'un HSM, cela est généralement disponible en tant que moteur OpenSSL.

Par exemple, Yubico a Documentation sur la création d'une demande de certificat pour une clé protégée par un Yubikey.

En substance, vous devez appeler OpenSSL Req comme ceci:

openssl req -new ... -config ssl.conf -engine engine_name -keyform engine -key key_name

Vous devez créer un ssl.conf fichier de configuration qui est un désordre (au moins pour PKCS n ° 11), quelque chose comme

openssl_conf = openssl_init

[openssl_init]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
dynamic_path = /usr/lib/ssl/engines/libpkcs11.so
MODULE_PATH = /usr/lib/opensc-pkcs11.so

Et vous devez comprendre comment spécifier key_name pour le moteur spécifique. Si vous n'avez pas de moteur OpenSSL pour votre module HSM, vous avez mal de chance. :-(

0
Bluehorn