Java を使用して X.509 証明書を作成する
 
X.509 は、公開鍵証明書の形式を定義する標準です。 オンライン通信、デジタル署名、および暗号化を保護するために SSL/TLS 証明書で広く使用されています。
この記事では、Java を使用して X.509 証明書を作成する方法を説明します。
要件:
- Java 開発キット (JDK)
- 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();注: 一部のパッケージのため、このコードはオンライン コンパイラでは実行できません。 この例をプロジェクトの開始点として使用し、特定の要件を満たすようにカスタマイズできます。 
出力:

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