Cryptographie en Java. Classe de certificat

Bonjour, Habr! Je vous présente la traduction de l'article final "Java Certificate" par Jakob Jenkov à partir d'une série d'articles pour les débutants qui veulent apprendre les bases de la cryptographie en Java.


Table des matières:


  1. Cryptographie Java
  2. Chiffrement Java
  3. Messagedigest
  4. Mac
  5. Signature
  6. Keypair
  7. Générateur de clés
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Attestation
  12. CertificateFactory
  13. CertPath

Certificat Java


La classe de certificat ( java.security.cert.Certificate ) est un certificat qui certifie qu'une entité appartient, par exemple, à un utilisateur. L'instance de classe de certificat contient le nom et d'autres informations sur l'objet qu'elle identifie, ainsi que, éventuellement, une signature numérique d'une autorité de certification (CA). La classe Certificate est une classe abstraite, par conséquent, vous pouvez utiliser Certificate comme type de variable, et votre variable pointera toujours vers une sous-classe. Cette classe a une sous-classe - X509Certificate , qui représente le certificat X.509, qui est utilisé comme certificat dans les protocoles HTTPS et TLS.


Obtention d'une instance de certificat


Vous pouvez obtenir une instance de certificat des manières suivantes:



Consultez ces deux guides pour plus d'informations sur l'obtention d'une instance de certificat.


getEncoded ()


La méthode getEncoded() du certificat renvoie la version codée du certificat sous forme de tableau d'octets. Par exemple, si le certificat est un certificat X509, le tableau d'octets renvoyé contiendra une version codée X.590 de l'instance de certificat (ASN.1 DER). Voici un exemple utilisant la méthode getEncoded() :


 byte[] encodedCertificate = certificate.getEncoded(); 

getPublicKey ()


La méthode de certificat getPublicKey() renvoie la clé publique de cette instance de certificat. Voici un exemple de méthode getPublicKey() :


 PublicKey certificatePublicKey = certificate.getPublicKey(); 

getType ()


La méthode getType() renvoie le type d'instance de certificat. Exemple getType() :


 String certificateType = certificate.getType(); 

vérifier ()


La classe de certificat contient trois méthodes verify() . Ces méthodes permettent de vérifier que le certificat est bien signé avec la clé privée correspondant à la clé publique attendue. Voici un exemple de vérification de certificat:


 //     (  !) PublicKey expectedPublicKey = ... ; try{ certificate.verify(expectedPublicKey); } catch (InvalidKeyException e) { //        } catch (NoSuchAlgorithmException | NoSuchProviderException | SignatureException | CertificateException e){ // -     } 

La méthode verify() ne renvoie pas de valeur. Si le test échoue, une InvalidKeyException sera InvalidKeyException . Si aucune exception n'est levée, l'instance de certificat peut être considérée comme vérifiée.


Java CertificateFactory (Certificate Factory


La classe CertificateFactory ( java.security.cert.CertificateFactory ) est capable de créer des instances de certificat ( Certificate ) à partir de données binaires pour les certificats codés X.509 (ASN.1 DER). CertificateFactory peut également créer des instances CertPath . CertPath est une chaîne de certificats, où chaque certificat est signé par le certificat suivant de cette chaîne.


Création d'une instance de CertificateFactory


Avant de pouvoir créer des instances de Certificate , vous devez créer une instance de CertificateFactory . Un exemple:


 CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 

Cet exemple crée une instance de CertificateFactory , capable d'instancier un certificat X.509 ( X509Certificate est une sous-classe de Certificate ).


Créer une instance de certificat


En créant une instance de CertificateFactory , vous pouvez commencer à créer des instances de Certificate . Cela se fait en appelant la méthode generateCertificate() . Un exemple d'appel de la méthode generateCertificate() :


 InputStream certificateInputStream = new FileInputStream("my-x509-certificate.crt"); Certificate certificate = certificateFactory.generateCertificate(certificateInputStream); 

Création d'une instance de CertPath


CertificateFactory peut également instancier CertPath . Une instance CertPath créée en appelant la méthode generateCertPath() :


 InputStream certificateInputStream = new FileInputStream("my-x509-certificate-chain.crt"); CertPath certPath = certificateFactory.generateCertPath(certificateInputStream); 

Java CertPath (chaîne de certificats)


La classe CertPath ( java.security.cert.CertPath ) représente une chaîne de certificats (objets de Certificate ), où chaque certificat est un signataire numérique du prochain certificat de la chaîne. La classe CertPath généralement utilisée pour vérifier un certificat d'identité auprès des certificats des autorités de certification (CA) qui ont signé le certificat.


Obtention d'une instance de CertPath


En règle générale, une instance CertPath obtenue à partir d'une fabrique de certificats ( CertificateFactory CertPathBuilder ).


getCertificates ()


Une fois que vous avez obtenu l'instance CertPath , vous pouvez obtenir les instances de Certificate que CertPath consiste en appelant la méthode getCertificates() . Voici un exemple d'obtention de certificats à partir d'une instance CertPath :


 List<Certificate> certificates = certPath.getCertificates(); 

getType ()


La méthode getType() renvoie une chaîne indiquant le type de certificats (par exemple, X.509) contenus dans cette instance CertPath . Voici un exemple d'obtention du type CertPath via la méthode getType() :


 String type = certPath.getType(); 

Source: https://habr.com/ru/post/fr446888/


All Articles