自己署名証明書ジェネレータ
ローカル開発とテスト用の自己署名SSL/TLS証明書を生成します。カスタマイズ可能な有効期限、キーサイズ、サブジェクト詳細を持つX.509証明書を作成します。
入力
出力
Readme
自己署名証明書とは?
自己署名証明書は、信頼された認証局(CA)ではなく、その作成者自身によって署名されたデジタル証明書です。Let's Encrypt、DigiCert、Comodoなどの認証局によって発行された証明書とは異なり、自己署名証明書はブラウザやオペレーティングシステムによって自動的に信頼されません。
デジタル証明書は公開鍵暗号を使用して、クライアントとサーバー間のセキュアで暗号化された接続を確立します。証明書には、証明書の所有者(サブジェクト)、発行者、有効期間、および公開鍵に関する情報が含まれています。サーバーが証明書を提示する場合、クライアントは信頼されたルート証明書に対して検証し、接続がセキュアで真正であることを確認します。
証明書生成はどのように機能しますか?
証明書生成プロセスには、いくつかの暗号化ステップが含まれます:
鍵ペア生成:RSA鍵ペア(公開鍵と秘密鍵)が生成されます。秘密鍵は秘密に保つ必要があり、公開鍵は証明書に埋め込まれます。
証明書作成:サブジェクト情報(Common Name、Organization、Countryなど)、有効期間、および公開鍵を含む証明書構造が作成されます。
自己署名:証明書は秘密鍵とハッシュアルゴリズム(SHA-256、SHA-384、またはSHA-512)を使用してデジタル署名されます。この署名により、公開鍵を持つ誰もが証明書の整合性を検証できます。
PEMエンコーディング:証明書と秘密鍵はPEM(Privacy-Enhanced Mail)形式でエンコードされます。これはBase64エンコード形式で、サーバーとアプリケーションで広くサポートされています。
ツール説明
このツールは、自己署名X.509証明書とそれに対応する秘密鍵をブラウザ内で直接生成します。データはサーバーに送信されません。すべての暗号化操作はnode-forgeライブラリを使用してローカルで実行されます。証明書のサブジェクトフィールド、鍵サイズ、有効期間、および署名アルゴリズムをカスタマイズして、特定の要件に合わせることができます。
例
基本的なlocalhostの証明書:
- Common Name:
localhost - 鍵サイズ:2048ビット
- 有効期間:1年
- アルゴリズム:SHA-256
開発サーバー証明書:
- Common Name:
dev.myapp.local - Organization:
My Company - Country:
US - 鍵サイズ:2048ビット
- 有効期間:2年
出力形式(証明書):
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3QasEBBUAMEUxCzAJBgNV
...
-----END CERTIFICATE-----出力形式(秘密鍵):
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA0Z3VS5JJcds3xfn/ygWyF8PbnGy...
...
-----END RSA PRIVATE KEY-----機能
- ブラウザベースの生成:すべての暗号化操作はブラウザ内でローカルに実行され、サーバー通信はありません
- 設定可能な鍵サイズ:異なるセキュリティレベルのために1024、2048、3072、または4096ビットのRSA鍵から選択できます
- 複数の署名アルゴリズム:SHA-256、SHA-384、およびSHA-512ハッシュアルゴリズムをサポートしています
- 完全なX.509フィールド:Common Name、Organization、Organizational Unit、Country、State、およびLocalityを設定できます
- 柔軟な有効期間:30日から10年まで有効な証明書を生成できます
証明書フィールドの説明
| フィールド | 説明 | 例 |
|---|---|---|
| Common Name(CN) | 証明書の対象となるドメイン名またはホスト名 | localhost、example.com |
| Organization(O) | 組織の法的名称 | Acme Corporation |
| Organizational Unit(OU) | 部門または部署 | IT Department |
| Country(C) | 2文字のISO国コード | US、GB、DE |
| State/Province(ST) | 州または県の名前 | California |
| Locality(L) | 市町村名 | San Francisco |
鍵サイズの推奨事項
- 1024ビット:本番環境には推奨されません。テストのみに適しています
- 2048ビット:標準的なセキュリティレベル。ほとんどのユースケースに推奨されます
- 3072ビット:強化されたセキュリティ。機密性の高い開発環境に適しています
- 4096ビット:最大セキュリティ。生成は遅くなりますが、最高の保護を提供します
ユースケース
ローカル開発サーバー:Service Workers、Geolocation API、WebRTCなどのセキュアコンテキストが必要な機能をテストするために、localhostのHTTPS証明書を作成します
内部テスト環境:CA署名付き証明書が不要なステージングサーバーとQA環境の証明書を生成します
DockerおよびコンテナアプリケーションDockerおよびコンテナアプリケーション:開発または分離されたネットワーク内のコンテナ間の通信をセキュアにします
API開発とテスト:ローカルAPIサーバーのHTTPSを有効にして、OAuthフロー、セキュアWebhook、および証明書ピンニングをテストします
学習と教育:独自の証明書を生成して検査することで、SSL/TLS証明書がどのように機能するかを理解します
インストール手順
証明書を生成した後、サーバーを設定し、場合によっては証明書を信頼する必要があります:
Node.js/Expressの場合:
const https = require("https");
const fs = require("fs");
const options = {
key: fs.readFileSync("private-key.pem"),
cert: fs.readFileSync("certificate.pem"),
};
https.createServer(options, app).listen(443);nginxの場合:
server {
listen 443 ssl;
ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/private-key.pem;
}証明書を信頼する(macOS):
- Keychain Accessを開きます
- certificate.pemファイルをインポートします
- 証明書をダブルクリックして、「信頼」を「常に信頼」に設定します
証明書を信頼する(Windows):
- certificate.pemファイルをダブルクリックします
- 「証明書のインストール」をクリックします
- 「ローカルコンピュータ」を選択して、「信頼されたルート認証局」に配置します
セキュリティに関する考慮事項
- 本番環境では自己署名証明書を使用しないでください。公開されているWebサイトの場合は特にそうです
- 秘密鍵をセキュアに保つ。アクセス権を持つ誰もがサーバーになりすまされる可能性があります
- 自己署名証明書はブラウザ警告を表示します。デフォルトでは信頼されていないためです
- 開発用に短い有効期間を使用して、証明書のローテーションを促進します
- 信頼されたローカル証明書が必要な場合は、mkcertなどのツールの使用を検討してください