Kryptographie in Java. Zertifikatsklasse

Hallo Habr! Ich präsentiere Ihnen die Übersetzung des letzten Artikels "Java Certificate" von Jakob Jenkov aus einer Reihe von Artikeln für Anfänger , die die Grundlagen der Kryptographie in Java erlernen möchten.


Inhaltsverzeichnis:


  1. Java-Kryptographie
  2. Java-Chiffre
  3. Messagedigest
  4. Mac
  5. Unterschrift
  6. Schlüsselpaar
  7. Schlüsselgenerator
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Zertifikat
  12. CertificateFactory
  13. CertPath

Java-Zertifikat


Die Zertifikatklasse ( java.security.cert.Certificate ) ist ein Zertifikat, das bestätigt, dass eine Entität beispielsweise einem Benutzer gehört. Die Zertifikatsklasseninstanz enthält den Namen und andere Informationen zu dem Objekt, das sie identifiziert, sowie möglicherweise eine digitale Signatur einer Zertifizierungsstelle (CA). Die Certificate Klasse ist eine abstrakte Klasse. Daher können Sie Certificate als Typ der Variablen verwenden, und Ihre Variable verweist immer auf eine Unterklasse. Diese Klasse hat eine Unterklasse - X509Certificate , das das X.509-Zertifikat darstellt, das in den Protokollen HTTPS und TLS als Zertifikat verwendet wird.


Erhalten einer Zertifikatsinstanz


Sie können eine Zertifikatinstanz auf folgende Arten abrufen:



Weitere Informationen zum Abrufen einer Zertifikatinstanz finden Sie in diesen beiden Handbüchern.


getEncoded ()


Die Methode getEncoded() des Zertifikats gibt die codierte Version des Zertifikats als Byte-Array zurück. Wenn das Zertifikat beispielsweise ein X509-Zertifikat ist, enthält das zurückgegebene Byte-Array eine X.590-codierte Version der Zertifikatinstanz (ASN.1 DER). Hier ist ein Beispiel mit der Methode getEncoded() :


 byte[] encodedCertificate = certificate.getEncoded(); 

getPublicKey ()


Die Zertifikatmethode getPublicKey() gibt den öffentlichen Schlüssel dieser Zertifikatinstanz zurück. Hier ist ein Beispiel für eine getPublicKey() -Methode:


 PublicKey certificatePublicKey = certificate.getPublicKey(); 

getType ()


Die Methode getType() gibt den Typ der Zertifikatinstanz zurück. Beispiel getType() :


 String certificateType = certificate.getType(); 

verify ()


Die Zertifikatklasse enthält drei verify() -Methoden. Mit diesen Methoden kann überprüft werden, ob das Zertifikat tatsächlich mit dem privaten Schlüssel signiert ist, der dem erwarteten öffentlichen Schlüssel entspricht. Hier ist ein Beispiel für die Zertifikatsüberprüfung:


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

Die verify() -Methode gibt keinen Wert zurück. Wenn der Test fehlschlägt, wird eine InvalidKeyException . Wenn keine Ausnahme ausgelöst wird, kann die Zertifikatinstanz als überprüft betrachtet werden.


Java CertificateFactory (Zertifikatfabrik


Die CertificateFactory Klasse ( java.security.cert.CertificateFactory ) kann Zertifikatinstanzen ( Certificate ) aus Binärdaten für X.509-codierte Zertifikate (ASN.1 DER) erstellen. CertificateFactory kann auch CertPath Instanzen erstellen. CertPath ist eine Zertifikatskette, bei der jedes Zertifikat vom nächsten Zertifikat in dieser Kette signiert wird.


Erstellen einer Instanz von CertificateFactory


Bevor Sie Certificate erstellen können, müssen Sie eine CertificateFactory Instanz erstellen. Ein Beispiel:


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

In diesem Beispiel wird eine Instanz von CertificateFactory , mit der ein X.509-Zertifikat instanziiert werden kann ( X509Certificate ist eine Unterklasse von Certificate ).


Zertifikatinstanz erstellen


Durch Erstellen einer Instanz von CertificateFactory können Sie mit dem Erstellen von Instanzen von Certificate . Dies erfolgt durch Aufrufen der Methode generateCertificate() . Ein Beispiel für den Aufruf der Methode generateCertificate() :


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

Erstellen einer Instanz von CertPath


CertificateFactory kann auch CertPath instanziieren. Eine CertPath Instanz CertPath durch Aufrufen der Methode generateCertPath() :


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

Java CertPath (Zertifikatskette)


Die CertPath Klasse ( java.security.cert.CertPath ) repräsentiert eine Kette von Zertifikaten ( Certificate ), wobei jedes Zertifikat ein digitaler Unterzeichner des nächsten Zertifikats in der Kette ist. Die CertPath Klasse CertPath normalerweise zum Überprüfen eines Identitätszertifikats zusammen mit Zertifikaten von Zertifizierungsstellen (CAs) verwendet, die das Zertifikat signiert haben.


Eine Instanz von CertPath abrufen


In der Regel wird eine CertPath Instanz von einer Zertifikatfactory ( CertificateFactory CertPathBuilder ) CertificateFactory CertPathBuilder .


getCertificates ()


Sobald Sie die CertPath Instanz erhalten haben, können Sie die Certificate , aus denen CertPath besteht, durch Aufrufen der Methode getCertificates() . Hier ist ein Beispiel für das CertPath von Zertifikaten von einer CertPath Instanz:


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

getType ()


Die Methode getType() gibt eine Zeichenfolge zurück, die angibt, welcher Zertifikatstyp (z. B. X.509) in dieser CertPath Instanz enthalten ist. Hier ist ein Beispiel für das CertPath des CertPath Typs über die Methode getType() :


 String type = certPath.getType(); 

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


All Articles