こんにちは、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()
メソッドが含まれています。 これらの方法を使用して、期待される公開鍵に対応する秘密鍵で証明書が実際に署名されていることを確認できます。 証明書の検証の例を次に示します。
// ( !) PublicKey expectedPublicKey = ... ; try{ certificate.verify(expectedPublicKey); } catch (InvalidKeyException e) { // } catch (NoSuchAlgorithmException | NoSuchProviderException | SignatureException | CertificateException e){ // - }
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();