こんにちは、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();