こんにちは、Habr! Javaの暗号化の基礎を学びたい初心者向けの一連の記事から、Jakob Jenkovによる最終記事「Java証明書」の翻訳を紹介します。
目次:
- Java暗号化
- Java暗号
- メッセージダイジェスト
- Mac
- 署名
- キーペア
- キージェネレーター
- KeyPairGenerator
- キーストア
- キーツール
- 証明書
- CertificateFactory
- 証明書パス
Java証明書
証明書クラス( java.security.cert.Certificate )は、特定のサブジェクト(たとえば、ユーザー)がそれに属していることを証明する証明書です。 証明書クラスのインスタンスには、識別されるオブジェクトに関する名前とその他の情報、および場合によっては証明機関(CA)からのデジタル署名が含まれます。 Certificateクラスは抽象クラスです。したがって、変数の型としてCertificateを使用でき、変数は常にサブクラスを指します。 このクラスには、X.509証明書を表すX509Certificate 1つのサブクラスがあります。これは、HTTPSおよびTLSプロトコルで証明書として使用されます。
証明書インスタンスの取得
次の方法で証明書インスタンスを取得できます。
CertificateFactoryから。- キーストアから。
証明書インスタンスの取得の詳細については、これらの2つのガイドを参照してください。
getEncoded()
証明書のgetEncoded()メソッドは、証明書のエンコードされたバージョンをバイト配列として返します。 たとえば、証明書がX509証明書である場合、返されるバイト配列には、X.590でエンコードされたバージョンの証明書インスタンス(ASN.1 DER)が含まれます。 getEncoded()メソッドを使用した例を次に示します。
byte[] encodedCertificate = certificate.getEncoded();
getPublicKey()
getPublicKey()証明書メソッドは、この証明書インスタンスの公開鍵を返します。 getPublicKey()メソッドの例を次に示します。
PublicKey certificatePublicKey = certificate.getPublicKey();
getType()
getType()メソッドは、証明書インスタンスのタイプを返します。 getType()例:
String certificateType = certificate.getType();
確認()
証明書クラスには3つのverify()メソッドが含まれています。 これらの方法を使用して、期待される公開鍵に対応する秘密鍵で証明書が実際に署名されていることを確認できます。 証明書の検証の例を次に示します。
verify()メソッドは値を返しません。 テストが失敗すると、 InvalidKeyExceptionがInvalidKeyExceptionさInvalidKeyExceptionます。 例外がスローされない場合、証明書インスタンスは検証済みと見なされます。
Java CertificateFactory(証明書ファクトリー
CertificateFactoryクラス( java.security.cert.CertificateFactory )は、X.509(ASN.1 DER)でエンコードされた証明書のバイナリデータから証明書インスタンス( Certificate )を作成できます。 CertificateFactoryはCertPathインスタンスも作成できCertPath 。 CertPathは、各証明書がチェーン内の次の証明書によって署名される証明書チェーンです。
CertificateFactoryのインスタンスを作成する
Certificateインスタンスを作成する前に、 Certificateのインスタンスを作成する必要があります。 例:
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
この例では、X.509証明書をインスタンス化できるCertificateFactoryインスタンスを作成します( X509CertificateはCertificateサブクラスです)。
証明書インスタンスを作成
CertificateFactoryインスタンスを作成することにより、 CertificateFactoryインスタンスの作成を開始できます。 これは、 generateCertificate()メソッドを呼び出すことにより行われます。 generateCertificate()メソッドを呼び出す例:
InputStream certificateInputStream = new FileInputStream("my-x509-certificate.crt"); Certificate certificate = certificateFactory.generateCertificate(certificateInputStream);
CertPathのインスタンスを作成する
CertificateFactoryはCertPathインスタンス化することもできCertPath 。 generateCertPath()メソッドを呼び出すことにより、 CertPathインスタンスCertPath作成されCertPath 。
InputStream certificateInputStream = new FileInputStream("my-x509-certificate-chain.crt"); CertPath certPath = certificateFactory.generateCertPath(certificateInputStream);
Java CertPath(証明書チェーン)
CertPathクラス( java.security.cert.CertPath )は、証明書のチェーン( Certificateオブジェクト)を表しCertPath 。各証明書はチェーン内の次の証明書のデジタル署名者です。 通常、 CertPathクラスCertPath 、証明書に署名した証明機関(CA)からの証明書と共に、ID証明書を検証するために使用されます。
CertPathのインスタンスを取得する
通常、 CertPathインスタンスCertPath証明書ファクトリー( CertificateFactory CertPathBuilder )から取得されCertificateFactory CertPathBuilder 。
getCertificates()
CertPathインスタンスを取得したら、 getCertificates()メソッドを呼び出すことにより、 CertPath構成するCertificateインスタンスを取得できCertPath 。 CertPathインスタンスから証明書を取得する例を次に示します。
List<Certificate> certificates = certPath.getCertificates();
getType()
getType()メソッドは、このCertPathインスタンスに含まれる証明書のタイプ(X.509など)を示す文字列を返します。 getType()メソッドを使用してCertPathタイプを取得する例を次に示しCertPath 。
String type = certPath.getType();