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:
- Java-Kryptographie
- Java-Chiffre
- Messagedigest
- Mac
- Unterschrift
- Schlüsselpaar
- Schlüsselgenerator
- KeyPairGenerator
- Keystore
- Keytool
- Zertifikat
- CertificateFactory
- 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:
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();