web-dev-qa-db-fra.com

Que signifie «signer» un certificat numérique?

Quand quelqu'un dit qu'un certificat numérique particulier (comme un certificat SSL) a été "signé avec une clé", qu'est-ce que cela implique? Cela signifie-t-il que le certificat comprend simplement une clé qui devrait être utilisée pour d'autres échanges de messages? Cela signifie-t-il que le certificat lui-même est chiffré et ne peut être déchiffré qu'avec cette clé? Cela implique-t-il autre chose? Merci d'avance.

25
zharvey

Idéalement, cela signifie que quelqu'un a regardé le certificat et a décidé qu'il était correct et légitime. Une fois qu'ils ont fait cela, ils veulent dire aux gens "Hé, j'ai vérifié que ce certificat est bon. Je fais confiance à lui". Pour ce faire, ils utilisent leur clé de signature pour signer le certificat.

Maintenant, quand quelqu'un obtient le certificat, il peut voir qui a signé le certificat. S'ils font confiance à l'un des signataires, ils peuvent faire confiance au certificat lui-même. C'est la base de Web Of Trust in PKI .

La signature effective dépend probablement du type de certificat dont il s'agit. Je pense c'est une lecture utile .

Un certificat numérique se compose de trois éléments:

  • Une clé publique.
  • Informations sur le certificat. (Informations "d'identité" sur l'utilisateur, telles que le nom, l'ID utilisateur, etc.)
  • Une ou plusieurs signatures numériques.

Généralement, la partie "une ou plusieurs signatures numériques" se fait en répertoriant un ensemble de hachages chiffrés du certificat. Ainsi, lorsque vous souhaitez signer un certificat, vous devez calculer le hachage du certificat, le chiffrer à l'aide de votre clé de signature privée et l'ajouter à la liste des signatures numériques.

23
Oleksi

Voici la structure d'un certificat X.509 :

    Certificate  ::=  SEQUENCE  {
        tbsCertificate       TBSCertificate,
        signatureAlgorithm   AlgorithmIdentifier,
        signatureValue       BIT STRING  }

   TBSCertificate  ::=  SEQUENCE  {
        version         [0]  EXPLICIT Version DEFAULT v1,
        serialNumber         CertificateSerialNumber,
        signature            AlgorithmIdentifier,
        issuer               Name,
        validity             Validity,
        subject              Name,
        subjectPublicKeyInfo SubjectPublicKeyInfo,
        issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                             -- If present, version MUST be v2 or v3
        subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                             -- If present, version MUST be v2 or v3
        extensions      [3]  EXPLICIT Extensions OPTIONAL
                             -- If present, version MUST be v3
        }

Les données contenues dans le certificat lui-même sont la partie TBSCertificate: il lie la clé publique (subjectPublicKeyInfo) à un identifiant (le sujet) et diverses autres extensions d'attributs).

Ceci est ensuite combiné avec la signature pour former une structure Certificate. L'algorithme de signature dicte comment cela doit être fait.

Essentiellement, un résumé de TBSCertificate (généralement SHA-1) est calculé puis signé avec la clé privée du signataire (l'émetteur en termes X.509). La moindre modification du contenu TBSCertificate devrait faire le changement de résumé, ce qui devrait à son tour invalider la signature.

À l'aide de clés RSA, la signature du résumé à l'aide de la clé privée est mathématiquement très similaire à ce qui serait fait pour le chiffrement à l'aide de la clé publique. Ce n'est pas le même concept, cependant, et DSA n'a pas cette réciprocité, par exemple.

Le principe est le même pour les autres types de certificats, bien que la structure puisse différer. Étant donné que les clés publiques PGP sont en fait des certificats, ces questions peuvent également vous intéresser:

9
Bruno

Quand quelqu'un dit qu'un certificat numérique particulier (comme un certificat SSL) a été "signé avec une clé", qu'est-ce que cela implique?

Cela implique que l'entité propriétaire de cette clé a attesté de l'exactitude des informations contenues dans le certificat et a joint des informations au certificat qui permettent de vérifier cette authentification.

Cela signifie-t-il que le certificat comprend simplement une clé qui devrait être utilisée pour d'autres échanges de messages?

Non. Les certificats ne prouvent que l'identité.

Cela signifie-t-il que le certificat lui-même est chiffré et ne peut être déchiffré qu'avec cette clé?

Non. Il n'y a aucune raison de crypter les certificats, ils ne contiennent que des informations publiques.

Cela implique-t-il autre chose?

Cela implique que le propriétaire de cette clé s'est porté garant des informations contenues dans le certificat. Pour un certificat SSL typique, les informations contenues dans le certificat sont une liaison entre une clé publique et un nom commun.

Par exemple, lorsque vous pointez votre navigateur sur https://www.Amazon.com/ Le serveur d'Amazon vous enverra un certificat. Ce certificat lie une clé publique particulière au nom www.Amazon.com. Votre navigateur confirme trois choses pour savoir qu'il parle à la vraie Amazonie:

  1. Le serveur a présenté un certificat qui était valide et signé par une clé de confiance.

  2. Le certificat lie l'identité "www.Amazon.com".

  3. Le serveur prouve qu'il possède la clé privée correspondant au certificat.

Le but de la signature du certificat est donc de mettre la crédibilité de l'agent signataire derrière les informations du certificat qui sont fondamentalement "ce gars possède cette clé".

6
David Schwartz