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:
- Cryptographie Java
- Chiffrement Java
- Messagedigest
- Mac
- Signature
- Keypair
- Générateur de clés
- KeyPairGenerator
- Keystore
- Keytool
- Attestation
- CertificateFactory
- 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:
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();