1. 概要

OpenSSLは、ユーザーがさまざまなSSL関連のタスクを実行できるようにするオープンソースのコマンドラインツールです。

このチュートリアルでは、OpenSSLを使用して自己署名証明書を作成する方法を学習します。

2. 秘密鍵の作成

まず、秘密鍵を作成します。 秘密鍵は暗号化を有効にするのに役立ち、証明書の最も重要なコンポーネントです。

openssl コマンドを使用して、パスワードで保護された2048ビットのRSA秘密鍵( domain.key )を作成しましょう。

openssl genrsa -des3 -out domain.key 2048

プロンプトが表示されたら、パスワードを入力します。 出力は次のようになります。

Generating RSA private key, 2048 bit long modulus (2 primes)
.....................+++++
.........+++++
e is 65537 (0x010001)
Enter pass phrase for domain.key:
Verifying - Enter pass phrase for domain.key:

秘密鍵を暗号化しないようにする場合は、コマンドから-des3オプションを削除するだけです。

3. 証明書署名要求の作成

証明書に署名する場合は、証明書署名要求(CSR)が必要です。 CSRには、公開鍵といくつかの追加情報(組織や国など)が含まれます。

既存の秘密鍵からCSR( domain.csr )を作成しましょう。

openssl req -key domain.key -new -out domain.csr

プロセスを完了するために、秘密鍵のパスワードといくつかのCSR情報を入力します。 出力は次のようになります。

Enter pass phrase for domain.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:AU
State or Province Name (full name) [Some-State]:stateA                        
Locality Name (eg, city) []:cityA
Organization Name (eg, company) [Internet Widgits Pty Ltd]:companyA
Organizational Unit Name (eg, section) []:sectionA
Common Name (e.g. server FQDN or YOUR name) []:domain
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

重要なフィールドは「CommonName」です。これは、ドメインの正確な完全修飾ドメイン名(FQDN)である必要があります。

チャレンジパスワード」と「オプションの会社名」は空のままにしておくことができます。

1つのコマンドで秘密鍵とCSRの両方を作成することもできます

openssl req -newkey rsa:2048 -keyout domain.key -out domain.csr

秘密鍵を暗号化しないようにする場合は、-nodesオプションを追加できます。

openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr

4. 自己署名証明書の作成

自己署名証明書は、独自の秘密鍵で署名された証明書です。 CA署名付き証明書と同様にデータの暗号化に使用できますが、証明書が信頼されていないことを示す警告がユーザーに表示されます。

既存の秘密鍵とCSRを使用して自己署名証明書( domain.crt )を作成しましょう。

openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt

-days オプションは、証明書が有効になる日数を指定します。

秘密鍵だけで自己署名証明書を作成できます。

openssl req -key domain.key -new -x509 -days 365 -out domain.crt

このコマンドは一時的なCSRを作成します。 もちろん、CSR情報のプロンプトはまだあります。

1つのコマンドで、秘密鍵と自己署名証明書を作成することもできます。

openssl req -newkey rsa:2048 -keyout domain.key -x509 -days 365 -out domain.crt

5. 独自のCAを使用してCA署名付き証明書を作成する

自己署名ルートCA証明書を作成し、それを信頼できる証明書としてローカルブラウザーにインストールすることで、独自の認証局(CA)になることができます。

5.1. 自己署名ルートCAを作成する

コマンドラインから秘密鍵( rootCA.key )と自己署名ルートCA証明書( rootCA.crt )を作成しましょう。

openssl req -x509 -sha256 -days 1825 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt

5.2. ルートCAでCSRに署名する

まず、次の内容の構成テキストファイル( domain.ext )を作成します。

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName = @alt_names
[alt_names]
DNS.1 = domain

DNS.1」フィールドは、当社のWebサイトのドメインである必要があります。

次に、ルートCA証明書とその秘密鍵を使用してCSR( domain.csr )に署名できます。

openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in domain.csr -out domain.crt -days 365 -CAcreateserial -extfile domain.ext

その結果、CA署名付き証明書はdomain.crtファイルに含まれます。

6. 証明書を表示する

openssl コマンドを使用して、証明書の内容をプレーンテキストで表示できます。

openssl x509 -text -noout -in domain.crt

出力は次のようになります。

Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            64:1a:ad:0f:83:0f:21:33:ff:ac:9e:e6:a5:ec:28:95:b6:e8:8a:f4
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = AU, ST = stateA, L = cityA, O = companyA, OU = sectionA, CN = domain, emailAddress = [email protected]
        Validity
            Not Before: Jul 12 07:18:18 2021 GMT
            Not After : Jul 12 07:18:18 2022 GMT
        Subject: C = AU, ST = stateA, L = cityA, O = companyA, OU = sectionA, CN = domain, emailAddress = [email protected]
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:a2:6a:2e:a2:17:68:bd:83:a1:17:87:d8:9c:56:
                    ab:ac:1f:1e:d3:32:b2:91:4d:8e:fe:4f:9c:bf:54:
                    aa:a2:02:8a:bc:14:7c:3d:02:15:a9:df:d5:1b:78:
                    17:ff:82:6b:af:f2:21:36:a5:ad:1b:6d:67:6a:16:
                    26:f2:a9:2f:a8:b0:9a:44:f9:72:de:7a:a0:0a:1f:
                    dc:67:b0:4d:a7:f4:ea:bd:0e:83:7e:d2:ea:15:21:
                    6d:8d:18:65:ed:f8:cc:6a:7f:83:98:e2:a4:f4:d6:
                    00:b6:ed:69:95:4e:0d:59:ee:e8:3f:e7:5a:63:24:
                    98:d1:4b:a5:c9:14:a5:7d:ef:06:78:2e:08:25:3c:
                    fd:05:0c:67:ce:70:5d:34:9b:c4:12:e6:e3:b1:04:
                    6a:db:db:e9:47:31:77:80:4f:09:5e:25:73:75:e4:
                    57:36:34:f8:c3:ed:a2:21:57:0e:e3:c1:5c:fc:d9:
                    f2:a3:b1:d9:d9:4f:e2:3e:ad:21:77:20:98:ed:15:
                    39:99:1b:7e:29:60:14:eb:76:8b:8b:72:16:b1:68:
                    5c:10:51:27:fa:41:49:c5:b7:c4:79:69:5e:28:a2:
                    c3:55:ac:e8:05:0f:4b:4a:bd:4b:2c:8b:7d:92:b0:
                    2d:b3:1a:de:9f:1a:5b:46:65:c6:33:b2:2e:7a:0c:
                    b0:2f
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha256WithRSAEncryption
         58:c0:cd:df:4f:c1:0b:5c:50:09:1b:a5:1f:6a:b9:9a:7d:07:
         51:ca:43:ec:ba:ab:67:69:c1:eb:cd:63:09:33:42:8f:16:fe:
         6f:05:ee:2c:61:15:80:85:0e:7a:e8:b2:62:ec:b7:15:10:3c:
         7d:fa:60:7f:ee:ee:f8:dc:70:6c:6d:b9:fe:ab:79:5d:1f:73:
         7a:6a:e1:1f:6e:c9:a0:ae:30:b2:a8:ee:c8:94:81:8e:9b:71:
         db:c7:8f:40:d6:2d:4d:f7:b4:d3:cf:32:04:e5:69:d7:31:9c:
         ea:a0:0a:56:79:fa:f9:a3:fe:c9:3e:ff:54:1c:ec:96:1c:88:
         e5:02:d3:d0:da:27:f6:8f:b4:97:09:10:33:32:87:a8:1f:08:
         dc:bc:4c:be:6b:cc:b9:0e:cf:18:12:55:17:44:47:2e:9c:99:
         99:3c:96:60:12:c6:fe:b0:ee:01:97:54:20:b0:13:51:4f:ee:
         1d:c0:3d:1a:30:aa:79:30:12:e2:4f:af:13:85:f8:c8:1e:f5:
         28:7c:55:66:66:10:f4:0a:69:c0:55:8a:9a:c7:eb:ec:15:f0:
         ef:bd:c1:d2:47:43:34:72:71:d2:c3:ff:f0:a3:c1:2c:63:56:
         f2:f5:cf:91:ec:a1:c0:1f:5d:af:c0:8e:7a:02:fe:08:ba:21:
         68:f2:dd:bd

7. 証明書フォーマットの変換

私たちの証明書( domain.crt )は、ASCIIPEMエンコードであるX.509証明書です。 OpenSSLを使用して、多目的に使用するために他の形式に変換できます。

7.1. PEMをDERに変換する

DER形式は通常Javaで使用されます。 PEMでエンコードされた証明書をDERでエンコードされた証明書に変換してみましょう。

openssl x509 -in domain.crt -outform der -out domain.der

7.2. PEMをPKCS12に変換する

PFXファイルとも呼ばれるPKCS12ファイルは、通常、MicrosoftIISで証明書チェーンをインポートおよびエクスポートするために使用されます。

次のコマンドを使用して秘密鍵と証明書を取得し、それらをPKCS12ファイルに結合します。

openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx

8. 結論

この記事では、OpenSSL を使用して自己署名証明書を最初から作成し、この証明書を表示して、他の形式に変換する方法を学びました。 これらがあなたの仕事に役立つことを願っています。