Javaでの暗号化。 証明書クラス

こんにちは、Habr! Javaの暗号化の基礎を学びたい初心者向けの一連の記事から、Jakob Jenkovによる最終記事「Java証明書」の翻訳を紹介します。







目次:



  1. Java暗号化
  2. Java暗号
  3. メッセージダイジェスト
  4. Mac
  5. 署名
  6. キーペア
  7. キージェネレーター
  8. KeyPairGenerator
  9. キーストア
  10. キーツール
  11. 証明書
  12. CertificateFactory
  13. 証明書パス


Java証明書



証明書クラス( java.security.cert.Certificate )は、特定のサブジェクト(たとえば、ユーザー)がそれに属していることを証明する証明書です。 証明書クラスのインスタンスには、識別されるオブジェクトに関する名前とその他の情報、および場合によっては証明機関(CA)からのデジタル署名が含まれます。 Certificate



クラスは抽象クラスです。したがって、変数の型としてCertificate



を使用でき、変数は常にサブクラスを指します。 このクラスには、X.509証明書を表すX509Certificate



1つのサブクラスがあります。これは、HTTPSおよびTLSプロトコルで証明書として使用されます。







証明書インスタンスの取得



次の方法で証明書インスタンスを取得できます。









証明書インスタンスの取得の詳細については、これらの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();
      
      






All Articles