web-dev-qa-db-fra.com

Expiration / appliquer le changement de phrase secrète pour les clés ssh privées

Par curiosité, et aussi pour vérifier si cela est réalisable:

Existe-t-il un moyen d'utiliser des outils standard pour attribuer une date d'expiration [uniquement] à la phrase secrète d'une clé privée ssh, ou pour appliquer l'expiration et la modification de la phrase secrète sans modifier la clé privée elle-même? (Je ne parle pas de scripts qui vérifient [a, c, m] l'heure de la paire de clés ou quelque chose comme ça ...)

Ou existe-t-il une solution standard permettant d'obtenir un résultat similaire, à savoir appliquer/garantir un changement régulier de la phrase secrète pour l'authentification par clé?

Veuillez ne pas demander POURQUOI Je veux le faire, mais n'hésitez pas à commenter la sécurité/les inconvénients/l'insécurité supplémentaires que cela pourrait fournir.

La seule chose vaguement liée semble être l'intervalle de validité qui peut être spécifié lors de la création de la paire de clés via ssh-keygen. Bien que si j'ai bien compris, cela expirerait le certificat de signature qui a été utilisé pour signer la paire de clés, expirant ainsi la clé elle-même.

9
doktor5000

Réponse simple, non. Les clés SSH sont de simples clés cryptographiques, si vous souhaitez y ajouter une période de validité, vous vous retrouvez sur le territoire PKI.

Il y a un réponse sur le site Ubuntu Stack Exchange, demandant comment faire pour que les clés SSH expirent automatiquement, mais cela concerne l'utilisation de ssh-agent outil.

Vous pouvez également utiliser une application tierce installée sur votre serveur pour expirer automatiquement les clés SSH en fonction de paramètres personnalisés. Un bon exemple de cela est l'outil SSHARK , qui utilise des enregistrements DNS personnalisés pour enregistrer la validité des clés et en utilisant le command= fonctionnalité dans le authorized_keys fichier.

8
StampyCode

Gardez à l'esprit qu'il n'y a aucun moyen pour dire à partir de la clé publique seule si la clé privée a même une phrase secrète associée, et aucun moyen de savoir quelle est la phrase secrète ou quand elle a été modifiée pour la dernière fois, même avec accès à la clé privée (bien qu'une bonne supposition puisse être que si la clé privée a été réécrite selon son dernier horodatage modifié depuis sa première génération, c'était pour changer la phrase de passe sur la clé).

Une approche qui ne nécessite pas l'accès aux clés privées pourrait ressembler à ceci:

  • exiger par politique l'utilisation d'un outil externe pour distribuer les clés publiques,
  • enregistrer dans cet outil lorsqu'une clé publique a été soumise, et
  • supprimer activement la clé publique de tous les systèmes à la date d'expiration ou lorsqu'elle est explicitement révoquée.

Le référentiel de clés publiques centralisé doit conserver les clés expirées aussi longtemps que nécessaire pour empêcher leur réutilisation, idéalement pour toujours, mais nous savons tous comment cela fonctionne.

6
Mike McManus

Quelque chose qui ressemble un peu à ce que vous voulez utilise une autorité de certification utilisateur SSH, qui vous permet de définir une durée de vie sur la clé signée. Quelle que soit l'automatisation que vous mettez en place, la signature des clés peut refuser de signer pendant plus de 90 jours. Ensuite, ajoutez la clé publique de votre autorité de certification utilisateur à TrustedUserCAKeys dans/etc/ssh/sshd_config et définissez AuthorizedKeysFile sur none.

L'intervalle de validité que vous mentionnez fait partie du système d'autorité de certification SSH et l'AFAIK ne s'applique qu'à une autorité de certification SSH.

3
Mark