Quel est le but de l'argument -nodes dans openssl?


103

Quel est le but de l' -nodesargument dans openssl?


2
Stack Overflow est un site pour les questions de programmation et de développement. Cette question semble hors sujet car elle ne concerne ni la programmation ni le développement. Consultez la rubrique Quels sujets puis-je poser ici dans le centre d'aide. Peut-être que Super User ou Unix & Linux Stack Exchange serait un meilleur endroit pour demander.
jww

20
@jww Je ne suis pas d'accord, openssl est une boîte à outils de bas niveau et les développeurs doivent s'en occuper tout le temps. La ligne est assez floue, et ce serait une grande perte de ne pas autoriser les questions openssl ici simplement parce qu'il se trouve qu'il s'agit d'une CLI plutôt que de la bibliothèque C.
gtd

@gtd - c'est une plainte fréquente lorsque je les signale. Voir également Où puis-je publier des questions sur Dev Ops? . (Mais je pense que j'ai fait une erreur sur celui-ci - la question est de 2011, et je crois que c'était sur le sujet à l'époque. Je n'aime pas pénaliser pour le changement de politique).
jww

2
@gtd - re: "openssl est une boîte à outils de bas niveau et les développeurs doivent s'en occuper tout le temps." - c'est à cela que servent Super User ou Unix & Linux Stack Exchange . "... ce serait une grosse perte de ne pas autoriser les questions openssl ..." - Les questions de programmation openssl C sont toujours les bienvenues ici. La perte des questions non liées à la programmation ne sera pas manquée car Stack Overflow est un site de programmation et de développement. Il existe d'autres sites sur lesquels vous pouvez vous rendre lorsque vous ne savez pas comment utiliser une commande.
jww

Merci pour le lien, je posterai ma réponse là-bas car je pense que c'est une question très importante.
gtd

Réponses:


123

L'option -nodesn'est pas le mot anglais "nodes", mais plutôt "no DES". Lorsqu'il est donné en argument, cela signifie qu'OpenSSL ne chiffrera pas la clé privée dans un fichier PKCS # 12 .

Pour crypter la clé privée, vous pouvez l'omettre -nodeset votre clé sera cryptée avec 3DES-CBC. Pour crypter la clé, OpenSSL vous demande un mot de passe et utilise ce mot de passe pour générer une clé de cryptage à l'aide de la fonction de dérivation de clé EVP_BytesToKey .

En fonction de votre version d'OpenSSL et des options compilées, vous pourrez peut- être fournir ces options à la place de -nodes:

-des          encrypt private keys with DES
-des3         encrypt private keys with triple DES (default)
-idea         encrypt private keys with idea
-seed         encrypt private keys with seed
-aes128, -aes192, -aes256
              encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
              encrypt PEM output with cbc camellia

Finalement, au niveau de la bibliothèque, OpenSSL appelle la fonction PEM_write_bio_PrivateKey avec l'algorithme de chiffrement (ou son absence) que vous choisissez.


1
Par chiffrer, voulez-vous dire avec un mot de passe?
Flimm

4
@Flimm: Protégé par un mot de passe, oui. Le mot de passe génère une clé de cryptage à l'aide d'un algorithme de dérivation de clé, et le cryptage est effectué avec la clé, pas avec le mot de passe. La seule façon d'utiliser la clé chiffrée est de la déchiffrer d'abord, pour lequel vous devez connaître le mot de passe avec lequel elle a été chiffrée pour générer la même clé.
indiv

pourquoi shoulud je crypte mon fichier de clé privée? ceux-ci ne sont publiés à personne, d'où le nom. Ou ai-je tort?
phil294

1
@Blauhirn: Vous crypteriez votre fichier de clé privée pour la même raison que vous crypteriez n'importe quel fichier: vous ne voulez pas que quelqu'un qui obtient une copie puisse le lire ou l'utiliser. Le chiffrement de la clé privée dépend de l'importance de la clé et de votre modèle de menace.
indiv

12

edit: nginx v1.7.3 a ajouté une directive ssl_password_file qui lit les phrases de passe à partir d'un fichier spécifié en essayant chaque phrase de passe sur le encrypted-private.key du contexte

indiv est exact que les -nodesmoyens d'argument que OpenSSL va créer UNENCRYPTED private.key ; sinon, il y aura une invite de phrase de passe pour créer encrypted-private.key . voir req , pkcs12 , CA.pl

cependant, je pense que le but (pour les programmeurs) est que:

  • Les serveurs HTTP (par exemple Apache , Nginx ) ne peuvent pas lire encrypted-private.key sans mot de passe →
    • Option A - chaque fois que le serveur HTTP démarre, doit fournir une phrase de passe pour encrypted-private.key
    • Option B - spécifier ssl_password_file file.keys;dans http { }ou server { }contexte. [ ref ]
    • Option C - utiliser -nodespour créer private.key sans cryptage

utile: verrouiller private.key

  • {ajouter un serveur HTTP au groupe ssl-cert }
  • sudo chown root:ssl-cert private.key- ch ange propre er de private.key à racine utilisateur, ssl-cert groupe
  • sudo chmod 640 private.key- changer les autorisations d'accès de private.key en propriétaire R / W, groupe R
  • maintenant, le serveur HTTP devrait pouvoir démarrer et lire une clé privée non chiffrée .

Option A

sécurité renforcée, mais lorsque le serveur redémarre, vous devez saisir manuellement la phrase de passe pour encrypted-private.key

Option B

sécurité moyenne, et probablement un bon équilibre entre A / C

Option C

plus faible sécurité, mais pas invité à entrer UNENCRYPTED private.key passphrase


excellente explication
rizidoro

1
Nginx peut lire les clés privées chiffrées depuis la version 1.7.3, voir: nginx.org/en/docs/http
...

2
Quel est le but d'intégrer nginx et ses versions dans la discussion? De plus, (B) et (C) offrent une sécurité équivalente (à savoir, les ACL du système de fichiers). Le problème que vous décrivez est le problème de stockage de clés sans assistance , et c'est un problème sans solution. Voir le livre Engineering Security de Gutmann .
jww

@jww la question demande "quel est le but ...". J'ai considéré le contexte de la question (QnA pour les programmeurs), que j'ai tenté d'indiquer via "cependant, je pense que le but (pour les programmeurs) est que:". spécifiquement concernant la sécurité .. peut être une discussion pour security.stackexchange.com
Jake Berger
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.