Jai besoin que quelquun dautre crypte des données secrètes avec ma clé publique que je peux ensuite décrypter avec ma clé privée. Jai produit une paire de clés privée / publique RSA avec OpenSSL qui leur a donné la clé publique et que tout fonctionne.
Plus récemment, quelquun a fait remarquer que nous sommes soumis à une éventuelle attaque de type man-in-the-middle où les méchants accepteraient ma clé publique et passeraient leur propre clé publique à lautre côté. Lautre partie crypterait alors consciencieusement les données secrètes, les transmettrait au MITM qui les déchiffrerait, les re-crypterait avec ma clé publique avant de me les transmettre sans que je sois le plus sage. La solution recommandée est de faire signer ma clé publique par une autorité de certification en laquelle lautre partie fait confiance avant de la transmettre.
À titre expérimental, jai produit un CSR que jai pu signer avec ma propre autorité de certification, mais le certificat résultant contient également la clé privée (cryptée). Je préfère ne pas transmettre ma clé secrète à qui que ce soit, chiffrée ou non.
Existe-t-il un moyen de simplement faire signer ma clé publique?
Commentaires
- Le certificat contient une clé privée? Hein? Comment as-tu réussi à faire ça? Pouvez-vous publier ce fichier sur pastebin.com? (Refaites-le avec une deuxième paire de clés pour ne pas ‘ partager loriginal.)
- Je pense que je commence à comprendre. Même si jai besoin de la clé privée pour produire une CSR, la CSR et le certificat résultant ne contiennent pas la clé privée. Un certificat est en fait une clé publique signée, ce qui est exactement ce que je veux.
Réponse
Signature dune clé publique est en fait un certificat. Voici les étapes que je prends pour produire un certificat de clé publique que je peux distribuer à dautres afin quils puissent communiquer en toute sécurité avec moi:
Configuration
- Générer les clés privées:
openssl genrsa -out private.pem 2048
- Générez les clés publiques:
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
- Créer un CSR (Certificate Signing Request)
openssl req -new -key private.pem -out certificate.csr
- Créez un certificat auto-signé (vous pouvez partager ce certificat)
openssl x509 -req -days 365 -in certificate.csr -signkey private.pem -out certificate.crt
Chiffrement
openssl rsautl -encrypt -inkey private.pem -keyform PEM -in data> encrypted_data
Décryptage
- Extraire la clé publique des certificats
openssl x509 -pubkey -noout -in certificate.crt> certpubkey.pem
- Décrypter les données
openssl rsautl -decrypt -inkey certpubkey.pem -keyform PEM -pubin -in encrypted_data> data
Si vous avez lintention de faire signer votre clé par une autorité de certification, vous devrez envoyer votre fichier CSR (et un peu dargent) à lautorité de certification de votre choix, elle vous donnera le certificat que vous pouvez utiliser à la place du certificat auto-signé. mentionné dans les étapes ci-dessus.
Commentaires
- Cest un peu linverse de ce que je demande, mais cela servira à des fins de discussion. Pour que lautre partie puisse déchiffrer, ils ont soit besoin de la clé publique extraite par moi qui est soumise à lattaque MITM, soit de lensemble du certificat qui comprend la clé privée (cryptée)
- @ user1683793 Le lautre extrémité a besoin de deux certificats. Le premier dont ils devraient déjà avoir (le certificat CA auto-signé). Le second contient la clé publique que vous souhaitez vérifier et est signé avec le certificat CA (à laide de la clé privée CA associée). La validité du deuxième certificat est testée à laide de la clé publique dans le certificat CA. Les clés privées restent toujours privées.
- Je pense que vous voulez » -encrypt » et » -decrypt » au lieu de » -sign » et » -verify « . (Détails ici: czeskis.com/random/openssl-encrypt-file.html )
- Ne fonctionne pas: 2. Décrypter les données na pas fonctionné pour moi. Avec:
openssl rsautl -decrypt -inkey certpubkey.pem -keyform PEM -pubin -in encrypted_data > data
Jobtiens cette erreur / msg:A private key is needed for this operation
- Section
Setup
, létape2
donnepublic.pem
– il nest ‘ utilisé dans aucun pas. À quoi sert cette clé publique lorsque le CSR est généré avec une clé privée?
Réponse
Il devrait y avoir trois entités impliquées dans le processus:
- Lexpéditeur – Vous
- Le destinataire – Lutilisateur
- Autorité de certification – Tiers de confiance (ou vous dans certains cas)
Le processus qui garde les choses en sécurité est « Lexpéditeur », génère une paire de clés (publiques et privées). Jaime les appeler clé et verrou pour un meilleur visuel. La clé (privée) ne doit jamais quitter la possession de lexpéditeur, cest pourquoi elle est appelée une clé privée.
Lexpéditeur génère alors une demande de signature de certificat (CSR) avec la clé publique (verrou ) qui est transmise à lautorité de certification (tiers de confiance), lautorité de certification signe la clé publique (verrou) avec la clé privée des autorités de certification.
Lautorité de certification envoie maintenant la clé publique « The Senders » qui est signée par la clé privée des autorités de certification à « Lexpéditeur », qui est maintenant le certificat.
Le destinataire obtient le certificat (par exemple via le navigateur Web) et vérifie quil est valide avec la clé publique des autorités de certification que possèdent à la fois «lexpéditeur» et «le destinataire» puisquils sont le tiers de confiance. Une fois vérifiée, la clé publique du certificat peut être reconnue * comme étant la clé publique de « lexpéditeur » inchangée.
Si « le destinataire » doit envoyer des données à « lexpéditeur », il utilise le clé publique du certificat de confiance pour crypter les données en un cypertexte qui est ensuite transmis à «lexpéditeur». Étant donné que seule la clé privée de «lexpéditeur» peut décrypter le texte chiffré qui a été chiffré avec la clé publique de «lexpéditeur». au milieu contient essentiellement du texte déformé inutile.
Dans certains cas, «lexpéditeur» peut générer sa propre autorité de certification en signant son propre CSR avec un ensemble de clés différent ou en sauto-signant avec le même ensemble de Dans ce cas, la clé publique «Lexpéditeur» doit être connue des deux parties via un canal sécurisé pour avoir toute confiance. Dans le logiciel, vous pouvez inclure un certificat dans le livrable qui peut être utilisé comme tiers de confiance.
* confiance nest valide que si lautorité de certification maintient une CRL (Certificate Revocation List) et que toutes les parties surveillent la liste pour sassurer que le certificat émis na pas été compromis. Le cas où lautorité de certification est compromise et la clé privée est divulguée existe et lorsque cela se produit, lagent compromettant peut utiliser la clé privée pour générer un certificat de confiance qui imite « lexpéditeur » , dans ce cas un MITM est possible et le MITM peut recevoir des données de « The Sender » décrypter, stocker, crypter avec un certificat valide qui ressemble à « The Sender », puis transmettre cela à « The Receiver ».
Réponse
Retirez la clé privée chiffrée de la copie du certificat CA que vous avez créé (lorsque vous la donnez à dautres). La clé privée le fait pas besoin dêtre là sauf si vous allez lutiliser pour signer un certificat contenant un autre euh clé publique.
Lorsque vous envoyez votre clé publique, envoyez plutôt un certificat entier (à lexception de la clé privée), signé à laide de la clé privée CA associée. Pour vérifier la validité de la clé publique à lintérieur de celui-ci, vous devez vérifier le hachage du certificat par rapport au hachage chiffré (qui a été chiffré à laide de la clé privée de lautorité de certification). Celui-ci est déchiffré à laide de la clé publique de lautorité de certification . Si le décryptage réussit et que le hachage correspond au hachage du certificat, alors les informations à lintérieur du certificat peuvent être fiables.
Il y a aussi plus quun simple chiffrement, par exemple une attaque de relecture dans laquelle un attaquant envoie des données chiffrées précédemment enregistrées. TLS couvre beaucoup plus que ce que la moyenne des gens pourrait penser, et la mise en œuvre dun système similaire nest absolument pas recommandée. Utilisez TLS chaque fois que possible pour tout ce qui est destiné à être privé.