Java を使用して X.509 証明書を作成する

Muhammad Adil 2024年2月15日
Java を使用して X.509 証明書を作成する

X.509 は、公開鍵証明書の形式を定義する標準です。 オンライン通信、デジタル署名、および暗号化を保護するために SSL/TLS 証明書で広く使用されています。

この記事では、Java を使用して X.509 証明書を作成する方法を説明します。

要件:

  1. Java 開発キット (JDK)
  2. Java 用の Bouncy Castle Crypto API

Java を使用して X.509 証明書を作成する手順

  • Bouncy Castle Crypto API をダウンロードする

    Bouncy Castle Crypto API は、暗号化アルゴリズムの Java 実装です。 セキュリティ対応の Java アプリケーションの開発に使用できる軽量の暗号化 API のコレクションを提供します。

    Bouncy Castle Crypto API をダウンロードするには、公式ウェブサイト にアクセスし、最新バージョンをダウンロードしてください。

  • Bouncy Castle Crypto API を Java プロジェクトに追加する

    Bouncy Castle Crypto API をダウンロードしたら、ライブラリを Java プロジェクトに追加します。 ライブラリは、ビルド システムまたは classpath の依存関係として追加できます。

  • キー ペアを生成する

    X.509 証明書を作成するには、キー ペアを生成する必要があります。 キー ペアは、秘密キーと公開キーで構成されます。

    秘密鍵は証明書の署名に使用され、公開鍵は署名の検証に使用されます。 KeyPairGenerator クラスを使用して、Java で鍵ペアを生成できます。

    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
    keyGen.initialize(2048);
    KeyPair keyPair = keyGen.generateKeyPair();
    
  • 自己署名証明書を作成する

    自己署名証明書は、信頼できる第三者ではなく作成者によって署名された証明書です。 X509V3CertificateGenerator クラスを使用して、Java で自己署名証明書を作成できます。

    X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();
    // Set the subject DN
    X500Principal dnName = new X500Principal("CN=Example");
    certGen.setSubjectDN(dnName);
    // Set the issuer DN
    certGen.setIssuerDN(dnName);
    // Set the public key
    certGen.setPublicKey(keyPair.getPublic());
    // Set the validity period
    certGen.setNotBefore(new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24 * 30));
    certGen.setNotAfter(new Date(System.currentTimeMillis() + 1000L * 60 * 60 * 24 * 365 * 10));
    // Set the signature algorithm
    certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
    // Generate the certificate
    X509Certificate cert = certGen.generate(keyPair.getPrivate(), "BC");
    
  • 証明書をファイルに保存する

    最後に、X.509 証明書と秘密鍵を格納するための標準形式である PEM 形式で証明書をファイルに保存できます。

    FileOutputStream fos = new FileOutputStream("example.pem");
    fos.write("-----BEGIN CERTIFICATE-----\n".getBytes());
    fos.write(Base64.getEncoder().encode(cert.getEncoded()));
    fos.write("\n-----END CERTIFICATE-----\n".getBytes());
    fos.close();
    

    注: 一部のパッケージのため、このコードはオンライン コンパイラでは実行できません。 この例をプロジェクトの開始点として使用し、特定の要件を満たすようにカスタマイズできます。

出力:

x509証明書を作成する出力

著者: Muhammad Adil
Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook