kakiro-webカキローウェブ

システム開発情報とコンピューター書籍の紹介サイト

CentOS7.2 64bit OpenSSLを使用して秘密鍵、CSRを作成し、自己署名のSSLサーバー証明書を作成

ネットワークで送受信するデータを暗号化する方法として、SSL(Secure Sockets Layer)があります。

SSLはバージョンアップされ、TLS(Transport Layer Security)というものになっているのですが、一般的にはSSLと表記されることが多いため、ここでもSSLという表記を使用します。

SSLで暗号化通信を行うには、SSLサーバー証明書が必要となります。

ここでは、CentOS7.2の標準リポジトリからインストールできるOpenSSL1.0.1eを使用して、SSLサーバー証明書を作成する際に必要となる秘密鍵とCSR(Certificate Signing Request)を作成し、自己署名のSSLサーバー証明書を作成する方法を、以下に示します。

※自己署名のSSLサーバー証明書は、CSRを作成せず、秘密鍵と同時に作成することもできます。その手順については、当サイトのCentOS7 64bit OpenSSLを使用して秘密鍵と自己署名のSSLサーバー証明書を同時に作成のページをご覧ください。

※CentOS6 64bitをご使用の場合は、当サイトのCentOS6 64bit OpenSSLを使用したSSL用の秘密鍵と証明書の作成のページをご覧ください。

※SSLクライアント証明書の作成については、当サイトのCentOS7 64bit OpenSSLを使用して自己認証局で署名したSSLクライアント証明書を作成のページをご覧ください。

SSLサーバー証明書の作成の流れ

初めにSSLサーバー証明書を作成する流れを簡単でありますが、記載しておきます。

  • クライアントとサーバーで公開鍵暗号で暗号化通信を行う際に使用する秘密鍵を、サーバーで作成します。

  • SSLサーバー証明書の作成を認証局(CA:Certification Authority)に依頼する際に必要となるCSR(Certificate Signing Request)を、サーバーで作成します。

    CSRには、先に作成したサーバーの秘密鍵と対になる公開鍵が含まれます。

    CSRを認証局に提出して、SSLサーバー証明書の作成を依頼します。

  • 認証局はCSRを元に、認証局の秘密鍵を使用して署名した、SSLサーバー証明書を作成します。

    SSLサーバー証明書には、サーバーの公開鍵が含まれます。

SSL暗号化通信の流れ

続いてSSL暗号化通信の流れを簡単でありますが、記載しておきます。

  • サーバーからクライアントにSSLサーバー証明書を送信します。

  • クライアントは認証局の証明書を使用して、SSLサーバー証明書の正当性を検証します。

    認証局の証明書には認証局の公開鍵が含まれており、認証局の公開鍵を使用して、SSLサーバー証明書の署名が認証局の秘密鍵で行われたものであることを確認します。

    公的な認証局の証明書は、通常はクライアントに事前にインストールされています。

  • クライアントに送信されたサーバーの公開鍵と、サーバーにあるサーバーの秘密鍵で、公開鍵暗号の暗号化通信を行い、データの暗号化通信で使用する共通鍵を作成します。

  • 共通鍵暗号を使用して、クライアントとサーバー間で暗号化通信を行います。

サーバーの秘密鍵を作成(パスフレーズなし)

秘密鍵にはパスフレーズを付けて暗号化し、他から不正に利用されることを防ぐこともできますが、ここではパスフレーズなしで秘密鍵の作成を行います。

※秘密鍵にパスフレーズを付けて暗号化するのは、秘密鍵の作成後に行うこともできます。

以下のようなコマンドを実行して、パスフレーズなしの秘密鍵の作成を行います。

# openssl genrsa -out server.key 2048
  • 公開鍵暗号の方式には、主にRSAが使用されます。

    RSAの秘密鍵を作成するには、「openssl genrsa」コマンドを使用します。

  • 「-out」オプションで、作成する秘密鍵のファイル名を指定します。

    秘密鍵のファイル名は任意です。拡張子に決まりもありません。

    ここでは、「server.key」という名前の秘密鍵を作成するようにしています。

  • コマンドの引数に、RSAの鍵のサイズを指定します。

    RSAの鍵のサイズは2048ビット以上であれば、強度が十分なものとなりますので、ここでは2048ビットになるように指定しています。

作成された秘密鍵の内容

作成された秘密鍵の内容は、以下のようになります。

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA1jm4ABRlyg3T0nTx1/TwNrVjno6n7gFkHW+Y+DlVYtIlqpcj
RlWdddU/yPDgxOgzdLTvJenoh/p9b/2uTFeZV3lqqNVcZ1cynBOBwEVPJblwaajI
9JM31amPCBD+JJADD1kWCUs/NR6XZxzUHrG/KhYT9id67vdu/zgkm70oxsDMX3yh
bMuSsU+pUG0zy5bPLOsmXF3LwT1vWD6PRTkK7UPh56pajCuIOMc2bSO6N9EeHz7M
BzOikpEV3oZDl+guA0cWn0jRcUIWYBGc/uqYj/zrUcL1nsUC2a5dUTQUHOa1WfOb
QBpNE0OOb9zZPr2RFKxnwYADBe/hY9f8yyQ3YwIDAQABAoIBAAwt7+YhQsBAFQDs
ISvUAyw5F9bV6XpAnf6Gb739FHuv0vBl8112VKN0YlH8T+siAHrsJoSTTeMdPLB3
TceNW2x7vLKonr5JWNlCyqexyRQt/NQlAnfVPuFo6Hbe8HQHtATVXclde9R7TsRQ
AUdVd7be1neyOu0HKEpeWMZ59K2IAfOCFLSNRX0oGHniq8eGxz36FKGhj7gS5PyH
ZQFYDrSAR1xBPQBo/7+95p+TaQJtAVfHoUlLZvzZyxLO2Ug7jiybtqlJ1WwXqLDR
evOUkIsF7hU9hHrqlLq9JYT7OYMY+MsVT5Ti6zt9FW2kj0oWUW1x3+3B0O75zh7l
SWlXeQECgYEA8CImp30wEkSMJnIdeHz0cXV2HenTmhDTh1+/auez7yHEJ2V8/N1y
ZcxE9+VsG0+kxlid45O0rQ6NEzbY/g9KNpG34mRMLIPh4VWpu2lz6AQ2DhMfNt1P
WxUp+vNNKEfv36Q5HPAdhWkNclBDFSer8/5rriu1Pj7IyW9hPIMD08ECgYEA5GFV
9i6udjoWQkkjyFkKD1bnCzcqDMAJXpj39btMxBZSQSLotez4m7VckW0OkBPelUhq
sbKFZebmMm7uQvxmAvmbEluoOVaPSTUhISIR9SSvSmhNm0X9cYlM/TjjCi2P644C
UIpafL82u+Jz6dWMxNDFGLM3Rv2novfwnXkfRCMCgYB64t8pIzVwg8e8/PT77eYi
EdxKXpi85RN62ZLZoI1COONqzdLyjFi4o5o/yhZSu6U1I7BZAAOb9DBZvt241hZC
arvRjUY2GZ+EcxQTJln8R/tppHt61jKACAqds9iuXnHw3tejaXWSCjqpX02VC+JB
UNfGH/P2UKbr/qWiE+HngQKBgGwpyWu6OjiWVDp6p27Y9NHFB9IhA1JclVNvQWjp
l3b7V2OwI+Ud4bTlVX0u2InWT0IGtTmJ4nIbxIS4UzH4llvsWcx9CpR1cZFrj1BA
8Z5YDIlCExdqM5nVPFhl2+nTIGmgrWn1zNtuOH8NxnZGBNCmS+Lh5llCA2ZE5Xm/
htZfAoGAffvWJK3TRz0KY1pKwj9Or9tscYN5nbStrzQRUguyzUnJq0tdpD8nvQ3k
Bp7db1yggHZoBmV6gHNHg9lOC6JznzBVdAdSYKqSqCHxCq+jCLfN1lrdQ+4n1C/W
161PhfTpr9H+OkKMZbfjqJlQg6wsOzhn2lC0KOoWP2Q4+I5UkAI=
-----END RSA PRIVATE KEY-----

このような「-----XXXXX-----」で囲まれた中に、Base64でエンコードされたデータがある形式は、PEMといいます。

作成された秘密鍵の詳しい内容

秘密鍵の詳しい内容は、以下のようなコマンドで確認することができます。

# openssl rsa -in server.key -text -noout
Private-Key: (2048 bit)
modulus:
    00:d6:39:b8:00:14:65:ca:0d:d3:d2:74:f1:d7:f4:
    f0:36:b5:63:9e:8e:a7:ee:01:64:1d:6f:98:f8:39:
    55:62:d2:25:aa:97:23:46:55:9d:75:d5:3f:c8:f0:
    e0:c4:e8:33:74:b4:ef:25:e9:e8:87:fa:7d:6f:fd:
    ae:4c:57:99:57:79:6a:a8:d5:5c:67:57:32:9c:13:
    81:c0:45:4f:25:b9:70:69:a8:c8:f4:93:37:d5:a9:
    8f:08:10:fe:24:90:03:0f:59:16:09:4b:3f:35:1e:
    97:67:1c:d4:1e:b1:bf:2a:16:13:f6:27:7a:ee:f7:
    6e:ff:38:24:9b:bd:28:c6:c0:cc:5f:7c:a1:6c:cb:
    92:b1:4f:a9:50:6d:33:cb:96:cf:2c:eb:26:5c:5d:
    cb:c1:3d:6f:58:3e:8f:45:39:0a:ed:43:e1:e7:aa:
    5a:8c:2b:88:38:c7:36:6d:23:ba:37:d1:1e:1f:3e:
    cc:07:33:a2:92:91:15:de:86:43:97:e8:2e:03:47:
    16:9f:48:d1:71:42:16:60:11:9c:fe:ea:98:8f:fc:
    eb:51:c2:f5:9e:c5:02:d9:ae:5d:51:34:14:1c:e6:
    b5:59:f3:9b:40:1a:4d:13:43:8e:6f:dc:d9:3e:bd:
    91:14:ac:67:c1:80:03:05:ef:e1:63:d7:fc:cb:24:
    37:63
publicExponent: 65537 (0x10001)
privateExponent:
    0c:2d:ef:e6:21:42:c0:40:15:00:ec:21:2b:d4:03:
    2c:39:17:d6:d5:e9:7a:40:9d:fe:86:6f:bd:fd:14:
    7b:af:d2:f0:65:f3:5d:76:54:a3:74:62:51:fc:4f:
    eb:22:00:7a:ec:26:84:93:4d:e3:1d:3c:b0:77:4d:
    c7:8d:5b:6c:7b:bc:b2:a8:9e:be:49:58:d9:42:ca:
    a7:b1:c9:14:2d:fc:d4:25:02:77:d5:3e:e1:68:e8:
    76:de:f0:74:07:b4:04:d5:5d:c9:5d:7b:d4:7b:4e:
    c4:50:01:47:55:77:b6:de:d6:77:b2:3a:ed:07:28:
    4a:5e:58:c6:79:f4:ad:88:01:f3:82:14:b4:8d:45:
    7d:28:18:79:e2:ab:c7:86:c7:3d:fa:14:a1:a1:8f:
    b8:12:e4:fc:87:65:01:58:0e:b4:80:47:5c:41:3d:
    00:68:ff:bf:bd:e6:9f:93:69:02:6d:01:57:c7:a1:
    49:4b:66:fc:d9:cb:12:ce:d9:48:3b:8e:2c:9b:b6:
    a9:49:d5:6c:17:a8:b0:d1:7a:f3:94:90:8b:05:ee:
    15:3d:84:7a:ea:94:ba:bd:25:84:fb:39:83:18:f8:
    cb:15:4f:94:e2:eb:3b:7d:15:6d:a4:8f:4a:16:51:
    6d:71:df:ed:c1:d0:ee:f9:ce:1e:e5:49:69:57:79:
    01
prime1:
    00:f0:22:26:a7:7d:30:12:44:8c:26:72:1d:78:7c:
    f4:71:75:76:1d:e9:d3:9a:10:d3:87:5f:bf:6a:e7:
    b3:ef:21:c4:27:65:7c:fc:dd:72:65:cc:44:f7:e5:
    6c:1b:4f:a4:c6:58:9d:e3:93:b4:ad:0e:8d:13:36:
    d8:fe:0f:4a:36:91:b7:e2:64:4c:2c:83:e1:e1:55:
    a9:bb:69:73:e8:04:36:0e:13:1f:36:dd:4f:5b:15:
    29:fa:f3:4d:28:47:ef:df:a4:39:1c:f0:1d:85:69:
    0d:72:50:43:15:27:ab:f3:fe:6b:ae:2b:b5:3e:3e:
    c8:c9:6f:61:3c:83:03:d3:c1
prime2:
    00:e4:61:55:f6:2e:ae:76:3a:16:42:49:23:c8:59:
    0a:0f:56:e7:0b:37:2a:0c:c0:09:5e:98:f7:f5:bb:
    4c:c4:16:52:41:22:e8:b5:ec:f8:9b:b5:5c:91:6d:
    0e:90:13:de:95:48:6a:b1:b2:85:65:e6:e6:32:6e:
    ee:42:fc:66:02:f9:9b:12:5b:a8:39:56:8f:49:35:
    21:21:22:11:f5:24:af:4a:68:4d:9b:45:fd:71:89:
    4c:fd:38:e3:0a:2d:8f:eb:8e:02:50:8a:5a:7c:bf:
    36:bb:e2:73:e9:d5:8c:c4:d0:c5:18:b3:37:46:fd:
    a7:a2:f7:f0:9d:79:1f:44:23
exponent1:
    7a:e2:df:29:23:35:70:83:c7:bc:fc:f4:fb:ed:e6:
    22:11:dc:4a:5e:98:bc:e5:13:7a:d9:92:d9:a0:8d:
    42:38:e3:6a:cd:d2:f2:8c:58:b8:a3:9a:3f:ca:16:
    52:bb:a5:35:23:b0:59:00:03:9b:f4:30:59:be:dd:
    b8:d6:16:42:6a:bb:d1:8d:46:36:19:9f:84:73:14:
    13:26:59:fc:47:fb:69:a4:7b:7a:d6:32:80:08:0a:
    9d:b3:d8:ae:5e:71:f0:de:d7:a3:69:75:92:0a:3a:
    a9:5f:4d:95:0b:e2:41:50:d7:c6:1f:f3:f6:50:a6:
    eb:fe:a5:a2:13:e1:e7:81
exponent2:
    6c:29:c9:6b:ba:3a:38:96:54:3a:7a:a7:6e:d8:f4:
    d1:c5:07:d2:21:03:52:5c:95:53:6f:41:68:e9:97:
    76:fb:57:63:b0:23:e5:1d:e1:b4:e5:55:7d:2e:d8:
    89:d6:4f:42:06:b5:39:89:e2:72:1b:c4:84:b8:53:
    31:f8:96:5b:ec:59:cc:7d:0a:94:75:71:91:6b:8f:
    50:40:f1:9e:58:0c:89:42:13:17:6a:33:99:d5:3c:
    58:65:db:e9:d3:20:69:a0:ad:69:f5:cc:db:6e:38:
    7f:0d:c6:76:46:04:d0:a6:4b:e2:e1:e6:59:42:03:
    66:44:e5:79:bf:86:d6:5f
coefficient:
    7d:fb:d6:24:ad:d3:47:3d:0a:63:5a:4a:c2:3f:4e:
    af:db:6c:71:83:79:9d:b4:ad:af:34:11:52:0b:b2:
    cd:49:c9:ab:4b:5d:a4:3f:27:bd:0d:e4:06:9e:dd:
    6f:5c:a0:80:76:68:06:65:7a:80:73:47:83:d9:4e:
    0b:a2:73:9f:30:55:74:07:52:60:aa:92:a8:21:f1:
    0a:af:a3:08:b7:cd:d6:5a:dd:43:ee:27:d4:2f:d6:
    d7:ad:4f:85:f4:e9:af:d1:fe:3a:42:8c:65:b7:e3:
    a8:99:50:83:ac:2c:3b:38:67:da:50:b4:28:ea:16:
    3f:64:38:f8:8e:54:90:02
  • RSAの鍵に関する処理には、「openssl rsa」コマンドを使用します。

  • 「-in」オプションで、詳しい内容を確認したい秘密鍵を指定します。

    ここでは、上記で作成した秘密鍵「server.key」を指定しています。

  • 「-text」オプションを指定すると、鍵の詳しい内容が出力されます。

  • 「-noout」オプションを指定すると、出力に上記のPEM形式のものが含まれなくなります。

サーバーの秘密鍵を作成(パスフレーズ付き)

サーバーに保存している秘密鍵を他から不正に使用されることを防ぐために、秘密鍵にパスフレーズを付けて暗号化して作成する場合は、以下のようなコマンドを実行します。

# openssl genrsa -out server.key.pass -aes128 2048
  • 公開鍵暗号の方式には、主にRSAが使用されます。

    RSAの秘密鍵を作成するには、「openssl genrsa」コマンドを使用します。

  • 「-out」オプションで、パスフレーズを付けて作成する秘密鍵のファイル名を指定します。

    パスフレーズ付きの秘密鍵のファイル名は任意です。拡張子に決まりもありません。

    ここでは、「server.key.pass」という名前のパスフレーズ付きの秘密鍵を作成するようにしています。

  • 秘密鍵にパスフレーズを付けて暗号化する際には、DES、AESといった共通鍵暗号の方式が指定可能です。

    ここでは、DESより新しく、安全とされているAESを使用するようにします。

    「-aes128」オプションを指定して、AESの鍵のサイズが128ビットのものを使用するようにしています。

  • コマンドの引数に、RSAの鍵のサイズを指定します。

    RSAの鍵のサイズは2048ビット以上であれば、強度が十分なものとなりますので、ここでは2048ビットになるように指定しています。

  • コマンドの実行時に秘密鍵に設定するパスフレーズの入力を2回求められますので、同じパスフレーズを2回入力します。

    このパスフレーズは、サーバーで秘密鍵を使用する際に指定が必要なものとなります。

作成された秘密鍵の内容

作成された秘密鍵の内容は、以下のようになります。

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,D65E74DC7D0D95E9FA6A4C36D892DC70

fdudtfcnp1puesGM0IvT5Ylw/TsK5UI8je99v6dRnw0iEeLtXlugrgqIzERg7SJC
417KPbRLX/NTSfpnP7+lBH+nsj48a8MJqnvmOo9IWdCtwqkBMKKxn4Za1/7cLDeG
ay9gWXnTVe8Geq1zl9SkOXqkzYTLsswCkIVH+hndB+mivBTvPCJbPNPd6rlpGGNt
Y+jIOGaWZEF6t8689oQlGsIrkAxUsVhvn9qhrOdMMhb3Hn+6Wwv1/DhB5N++HRGW
8ArOvyu1RAfm4cdCgYvtShlxCWJmOR+zhuBc0QMtCfLA7j9Maw7LiPBPPSyTPc8T
xl+qr75O90t8v3diWuScq2sHUQHiKVFSliSIIl9TpDBu8BQ3ea+JkZwuwzwzObl+
0BqkHbTd/pQGAs+ce/pJoJl/UUjSdRBhF53BI9kdhEnjw5zUUSBaa1lVZkqYuljr
n9MrdUMl2W4If91C2faF/uUgEbVx2D50c6TlJndeH8bGJPwucQmaUHxCjK/pjH93
94F8sDfBaRKCCndLZdkO6zdT+VPlMHjGLF/bZirF93k3DvInJKV1q7Okal3gW3zq
fEE595NXSS4heBoOVGNBOG2cN8sWU7ZRIvdoKxJHCOvUDv0b07tLsR0Jc0dqwrlN
eBtLiT4clKpkkxAoIqOKAYp817q74ssvjKEGo6UUUst782qVEfADhOaIgEVUGSG/
xw7Npjo464iVBTJ0KuhHE1v/hRQ773U5BYeETxtDQuHQBUTasZsXNPyyW+9phWcI
XEZqwDGkxQp2iWGSonrUEtLPp9zr7Eo/s4Cbjplx+oVPgdwKJiEV7ObNr9u0uOV+
4ThwV0r6OhZAYT14/jVNfjQD0u+Cpdtfz55lQszCqJY+dUB4dDLYYAf9a0lgVZd7
dEM/ykrLQJcXggN1T1UPo7o3mwHmKE4xMCekgnB02+vMcl68Sml3xCW7rYRgPqx6
5VU9V8SP/PTLbUcFltoVbwKSfrugv0EUUVX4P5W7ybzvD3iwjtUCW/rR2yR7K5eb
Kq+CP++devvGaS4nkpM6Wj27TLNLENkZbtUMTioVbKTM3ingEwJUlIWahzjbvjux
DDi9Jk2k+kqHpJEBrLXES7c9cBGHwjXROgXRCixPmXvDJ3yTE8ZivamUzr/omFps
yta0YPfzspFb7LqiVpRwh0Op4jsybnD/WcDzwV4WuQF4H72LBlyJ17SN10GGds9M
OIxJYqW4bE9eM9aNKU8LGLWGZrsfg40XO3hbSy27dgkM7rGWUXmwhzLKAq92Q1OB
zlphaPHMp+QbHs8D5c19JiIDLDmxPJ6nOXFn9BfoPXgUNxKtjPAeowtf28NJPvNn
lWnCxdhbmekzd3Gc70FRePwqZrrytjRVjy2poN+JeiHUhCXGGsefycnH7ihFjvdq
k1tWQOXoA0JQSj3FK/1Ib0gyQ8XxwP9QNVtTK2YY0j9+XCVU2gLObJc0y/2UqC+T
zfsHYld3pmFm7FP0+lsNT0j+5V1nJZz+WnT+v4GE0GlPIBf34f17T6xXcxpRJs+P
JvGftbJrabF3p44QnZ6QJNIv8+xYs7zTGn+vdKlfL3PNm5YRCAGxest5DgjdqThM
-----END RSA PRIVATE KEY-----

この内容は暗号化されているものになりますので、実際の秘密鍵とは異なるものになります。

作成された秘密鍵の詳しい内容

秘密鍵の詳しい内容は、上記のパスフレーズなしの秘密鍵と同様に、以下のようなコマンドで確認することができます。

# openssl rsa -in server.key.pass -text -noout

コマンドの実行時にパスフレーズの入力を求められますので、秘密鍵に設定されているパスフレーズを入力します。

出力内容はパスフレーズ付きで暗号化されているものを符号化したものとなり、上記のパスフレーズなしの秘密鍵と同様になります。

パスフレーズなしの秘密鍵にパスフレーズを付けて暗号化したい場合

パスフレーズなしの秘密鍵にパスフレーズを付けて暗号化するには、以下のようなコマンドを実行します。

# openssl rsa -in server.key -aes128 -out server.key.pass
  • RSAの鍵に関する処理には、「openssl rsa」コマンドを使用します。

  • 「-in」オプションで、パスフレーズを付けて暗号化したいパスフレーズなしの秘密鍵を指定します。

    ここでは、上記でパスフレーズなしで作成した秘密鍵「server.key」を指定しています。

  • 秘密鍵にパスフレーズを付けて暗号化する際には、DES、AESといった共通鍵暗号の方式が指定可能です。

    ここでは、DESより新しく、安全とされているAESを使用するようにします。

    「-aes128」オプションを指定して、AESの鍵のサイズが128ビットのものを使用するようにしています。

  • 「-out」オプションで、パスフレーズを付けて作成する秘密鍵のファイル名を指定します。

    ここでは、「server.key.pass」という名前のパスフレーズ付きの秘密鍵を作成するようにしています。

  • コマンドの実行時に秘密鍵に設定するパスフレーズの入力を2回求められますので、同じパスフレーズを2回入力します。

    このパスフレーズは、サーバーで秘密鍵を使用する際に指定が必要なものとなります。

パスフレーズ付きで暗号化されている秘密鍵からパスフレーズを外して復号化したい場合

パスフレーズ付きで暗号化されている秘密鍵からパスフレーズを外して復号化するには、以下のようなコマンドを実行します。

# openssl rsa -in server.key.pass -out server.key
  • RSAの鍵に関する処理には、「openssl rsa」コマンドを使用します。

  • 「-in」オプションで、パスフレーズ付きで暗号化されている秘密鍵を指定します。

    ここでは、上記でパスフレーズ付きで作成した秘密鍵「server.key.pass」を指定しています。

  • 「-out」オプションで、パスフレーズを外して復号化して作成する秘密鍵のファイル名を指定します。

    ここでは、「server.key」という名前のパスフレーズなしの秘密鍵を作成するようにしています。

  • コマンドの実行時にパスフレーズの入力を求められますので、秘密鍵に設定されているパスフレーズを入力します。

CSR(Certificate Signing Request)を作成

以下のようなコマンドを実行して、CSRの作成を行います。

# openssl req -new -key server.key -out server.csr
  • CSRに関する処理には、「openssl req」コマンドを使用します。

  • 「-new」オプションを指定すると、CSRの作成が行われるようになります。

  • 「-key」オプションで、CSRの作成に使用する秘密鍵を指定します。

    ここでは、上記で作成した秘密鍵「server.key」を指定しています。

    ここで指定した秘密鍵が、CSRに含まれる公開鍵と対になります。

  • 「-out」オプションで、作成するCSRのファイル名を指定します。

    CSRのファイル名は任意です。拡張子に決まりもありません。

    ここでは、「server.csr」という名前のCSRを作成するようにしています。

  • ※「-key」オプションで、秘密鍵にパスフレーズ付きのものを指定した場合、コマンドの実行時にパスフレーズの入力を求められますので、秘密鍵に設定されているパスフレーズを入力します。

コマンドの実行時に入力を求められる以下の項目については、ここではサンプル用の値を指定していますが、公的な認証局にSSLサーバー証明書の作成を依頼する場合は、認証局のホームページに各項目の説明があるかと思いますので、そちらを参考に正しい値を指定してください。

空にしている項目については、公的な認証局にSSLサーバー証明書の作成を依頼する場合も空でよいようですので、ここでも空にしています。

Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:ExampleState
Locality Name (eg, city) [Default City]:ExampleLocality
Organization Name (eg, company) [Default Company Ltd]:ExampleOrganization
Organizational Unit Name (eg, section) []:ExampleOrganizationalUnit
Common Name (eg, your name or your server's hostname) []:www.example.com
Email Address []:

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

作成されたCSRの内容

作成されたCSRの内容は、以下のようになります。

-----BEGIN CERTIFICATE REQUEST-----
MIIC4DCCAcgCAQAwgZoxCzAJBgNVBAYTAkpQMRUwEwYDVQQIDAxFeGFtcGxlU3Rh
dGUxGDAWBgNVBAcMD0V4YW1wbGVMb2NhbGl0eTEcMBoGA1UECgwTRXhhbXBsZU9y
Z2FuaXphdGlvbjEiMCAGA1UECwwZRXhhbXBsZU9yZ2FuaXphdGlvbmFsVW5pdDEY
MBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEA1jm4ABRlyg3T0nTx1/TwNrVjno6n7gFkHW+Y+DlVYtIlqpcjRlWd
ddU/yPDgxOgzdLTvJenoh/p9b/2uTFeZV3lqqNVcZ1cynBOBwEVPJblwaajI9JM3
1amPCBD+JJADD1kWCUs/NR6XZxzUHrG/KhYT9id67vdu/zgkm70oxsDMX3yhbMuS
sU+pUG0zy5bPLOsmXF3LwT1vWD6PRTkK7UPh56pajCuIOMc2bSO6N9EeHz7MBzOi
kpEV3oZDl+guA0cWn0jRcUIWYBGc/uqYj/zrUcL1nsUC2a5dUTQUHOa1WfObQBpN
E0OOb9zZPr2RFKxnwYADBe/hY9f8yyQ3YwIDAQABoAAwDQYJKoZIhvcNAQELBQAD
ggEBAA6n0oU951BK4r148n+cNretcRuhLSAo1JR6kY1nLZwUCWlnh1/yH6gpE/Dv
hA36hmU9oo9jwlX10WIJKSEpaSrtQpetmBZvAw4HD43FCFvGVEif7hj99I1deVUZ
z6SPkMRhEL05HNaX17Xzo87xuIfCyHHiXIp0474w44qfDTMeSA+WuKc1uKPyHnE4
+JAJF5Zq32MPxMIv8OIl0nrS9YXp4vKC+S+SzDvEKcbtO1K020g2wRXNyIXfDok5
Nmi/Grei84/F440YuGVXREEh6UN22dy5XDzkJY/VZ7QaH1YS5Qn3XbmM2I57SMeo
2Tk6geSjahH9begT6o5Up+yste4=
-----END CERTIFICATE REQUEST-----

作成されたCSRの詳しい内容

CSRの詳しい内容は、以下のようなコマンドで確認することができます。

# openssl req -in server.csr -text -noout
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP, ST=ExampleState, L=ExampleLocality, O=ExampleOrganization, OU=ExampleOrganizationalUnit, CN=www.example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:d6:39:b8:00:14:65:ca:0d:d3:d2:74:f1:d7:f4:
                    f0:36:b5:63:9e:8e:a7:ee:01:64:1d:6f:98:f8:39:
                    55:62:d2:25:aa:97:23:46:55:9d:75:d5:3f:c8:f0:
                    e0:c4:e8:33:74:b4:ef:25:e9:e8:87:fa:7d:6f:fd:
                    ae:4c:57:99:57:79:6a:a8:d5:5c:67:57:32:9c:13:
                    81:c0:45:4f:25:b9:70:69:a8:c8:f4:93:37:d5:a9:
                    8f:08:10:fe:24:90:03:0f:59:16:09:4b:3f:35:1e:
                    97:67:1c:d4:1e:b1:bf:2a:16:13:f6:27:7a:ee:f7:
                    6e:ff:38:24:9b:bd:28:c6:c0:cc:5f:7c:a1:6c:cb:
                    92:b1:4f:a9:50:6d:33:cb:96:cf:2c:eb:26:5c:5d:
                    cb:c1:3d:6f:58:3e:8f:45:39:0a:ed:43:e1:e7:aa:
                    5a:8c:2b:88:38:c7:36:6d:23:ba:37:d1:1e:1f:3e:
                    cc:07:33:a2:92:91:15:de:86:43:97:e8:2e:03:47:
                    16:9f:48:d1:71:42:16:60:11:9c:fe:ea:98:8f:fc:
                    eb:51:c2:f5:9e:c5:02:d9:ae:5d:51:34:14:1c:e6:
                    b5:59:f3:9b:40:1a:4d:13:43:8e:6f:dc:d9:3e:bd:
                    91:14:ac:67:c1:80:03:05:ef:e1:63:d7:fc:cb:24:
                    37:63
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         0e:a7:d2:85:3d:e7:50:4a:e2:bd:78:f2:7f:9c:36:b7:ad:71:
         1b:a1:2d:20:28:d4:94:7a:91:8d:67:2d:9c:14:09:69:67:87:
         5f:f2:1f:a8:29:13:f0:ef:84:0d:fa:86:65:3d:a2:8f:63:c2:
         55:f5:d1:62:09:29:21:29:69:2a:ed:42:97:ad:98:16:6f:03:
         0e:07:0f:8d:c5:08:5b:c6:54:48:9f:ee:18:fd:f4:8d:5d:79:
         55:19:cf:a4:8f:90:c4:61:10:bd:39:1c:d6:97:d7:b5:f3:a3:
         ce:f1:b8:87:c2:c8:71:e2:5c:8a:74:e3:be:30:e3:8a:9f:0d:
         33:1e:48:0f:96:b8:a7:35:b8:a3:f2:1e:71:38:f8:90:09:17:
         96:6a:df:63:0f:c4:c2:2f:f0:e2:25:d2:7a:d2:f5:85:e9:e2:
         f2:82:f9:2f:92:cc:3b:c4:29:c6:ed:3b:52:b4:db:48:36:c1:
         15:cd:c8:85:df:0e:89:39:36:68:bf:1a:b7:a2:f3:8f:c5:e3:
         8d:18:b8:65:57:44:41:21:e9:43:76:d9:dc:b9:5c:3c:e4:25:
         8f:d5:67:b4:1a:1f:56:12:e5:09:f7:5d:b9:8c:d8:8e:7b:48:
         c7:a8:d9:39:3a:81:e4:a3:6a:11:fd:6d:e8:13:ea:8e:54:a7:
         ec:ac:b5:ee
  • CSRに関する処理には、「openssl req」コマンドを使用します。

  • 「-in」オプションで、詳しい内容を確認したいCSRを指定します。

    ここでは、上記で作成したCSR「server.csr」を指定しています。

  • 「-text」オプションを指定すると、CSRの詳しい内容が出力されます。

  • 「-noout」オプションを指定すると、出力に上記のPEM形式のものが含まれなくなります。

自己署名のSSLサーバー証明書を作成

以下のようなコマンドを実行して、自己署名のSSLサーバー証明書の作成を行います。

# openssl x509 -req -in server.csr -signkey server.key -sha256 -days 3650 -out server.crt
  • 証明書に関する処理には、「openssl x509」コマンドを使用します。

    x509というのは、証明書の規格になります。

  • 「-req」オプションを指定すると、入力にはCSRを使用するようになります。

  • 「-in」オプションで、CSRを指定します。

    ここでは、上記で作成したCSR「server.csr」を指定しています。

  • 「-signkey」オプションで、自己署名を行う秘密鍵を指定します。

    ここでは、上記で作成したサーバーの秘密鍵「server.key」を指定しています。

  • 証明書の署名アルゴリズムには、SHA-1ではなくSHA-2(SHA-256)を使用することが推奨されています。

    「-sha256」オプションを指定して、証明書の署名アルゴリズムにSHA-256を使用するようにしています。

  • 「-days」オプションで、証明書の有効期限を日単位で指定します。

    ここでは、「3650」と指定し、証明書の有効期限を3650日(約10年)にしています。

  • 「-out」オプションで、作成するSSLサーバー証明書のファイル名を指定します。

    SSLサーバー証明書のファイル名は任意です。拡張子に決まりもありません。

    ここでは、「server.crt」という名前のSSLサーバー証明書を作成するようにしています。

  • ※「-signkey」オプションで、秘密鍵にパスフレーズ付きのものを指定した場合、コマンドの実行時にパスフレーズの入力を求められますので、秘密鍵に設定されているパスフレーズを入力します。

作成されたSSLサーバー証明書の内容

作成されたSSLサーバー証明書の内容は、以下のようになります。

-----BEGIN CERTIFICATE-----
MIIDsjCCApoCCQD3tdj6KrPqmDANBgkqhkiG9w0BAQsFADCBmjELMAkGA1UEBhMC
SlAxFTATBgNVBAgMDEV4YW1wbGVTdGF0ZTEYMBYGA1UEBwwPRXhhbXBsZUxvY2Fs
aXR5MRwwGgYDVQQKDBNFeGFtcGxlT3JnYW5pemF0aW9uMSIwIAYDVQQLDBlFeGFt
cGxlT3JnYW5pemF0aW9uYWxVbml0MRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20w
HhcNMTYwNTE2MTUxMjU5WhcNMjYwNTE0MTUxMjU5WjCBmjELMAkGA1UEBhMCSlAx
FTATBgNVBAgMDEV4YW1wbGVTdGF0ZTEYMBYGA1UEBwwPRXhhbXBsZUxvY2FsaXR5
MRwwGgYDVQQKDBNFeGFtcGxlT3JnYW5pemF0aW9uMSIwIAYDVQQLDBlFeGFtcGxl
T3JnYW5pemF0aW9uYWxVbml0MRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20wggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWObgAFGXKDdPSdPHX9PA2tWOe
jqfuAWQdb5j4OVVi0iWqlyNGVZ111T/I8ODE6DN0tO8l6eiH+n1v/a5MV5lXeWqo
1VxnVzKcE4HARU8luXBpqMj0kzfVqY8IEP4kkAMPWRYJSz81HpdnHNQesb8qFhP2
J3ru927/OCSbvSjGwMxffKFsy5KxT6lQbTPLls8s6yZcXcvBPW9YPo9FOQrtQ+Hn
qlqMK4g4xzZtI7o30R4fPswHM6KSkRXehkOX6C4DRxafSNFxQhZgEZz+6piP/OtR
wvWexQLZrl1RNBQc5rVZ85tAGk0TQ45v3Nk+vZEUrGfBgAMF7+Fj1/zLJDdjAgMB
AAEwDQYJKoZIhvcNAQELBQADggEBAJ7CHeXYU1bcUAM+plf09XmZ3xF3sXd2BuDU
C2MF7PJsUI6/zbf6yycg/0yEuOLakNhmnXN/8bEOCW2rCiiHfKuT+qoe7Zq88aJL
iiur0w1cf/PHLRYD/QuLBPW6i22bi1MfckJ1aRE15iI+IZRD+3SQHAtCevqHj0VZ
LfgOhPY2y8yAqIJrwLGIMM54YibyAhDRP4/kpJ6I7AoSmmX2Lfr41aengOTGP6/p
J2cMA1ohemHlz36OXoefUP7nI7zGSTBLHz2kNuE1hOrOOHQtqeFwq/u9ga08qjmb
k8KevbkcP1zPXzIpo+7RBAm7M9R52Mf1zrbGWh0NsUXCKnwzpYw=
-----END CERTIFICATE-----

作成されたSSLサーバー証明書の詳しい内容

SSLサーバー証明書の詳しい内容は、以下のようなコマンドで確認することができます。

# openssl x509 -in server.crt -text -noout
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number: XXXXXXXXXXXXXXXXXXXX (0xXXXXXXXXXXXXXXXX)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, ST=ExampleState, L=ExampleLocality, O=ExampleOrganization, OU=ExampleOrganizationalUnit, CN=www.example.com
        Validity
            Not Before: XXX XX XX:XX:XX XXXX GMT
            Not After : XXX XX XX:XX:XX XXXX GMT
        Subject: C=JP, ST=ExampleState, L=ExampleLocality, O=ExampleOrganization, OU=ExampleOrganizationalUnit, CN=www.example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:d6:39:b8:00:14:65:ca:0d:d3:d2:74:f1:d7:f4:
                    f0:36:b5:63:9e:8e:a7:ee:01:64:1d:6f:98:f8:39:
                    55:62:d2:25:aa:97:23:46:55:9d:75:d5:3f:c8:f0:
                    e0:c4:e8:33:74:b4:ef:25:e9:e8:87:fa:7d:6f:fd:
                    ae:4c:57:99:57:79:6a:a8:d5:5c:67:57:32:9c:13:
                    81:c0:45:4f:25:b9:70:69:a8:c8:f4:93:37:d5:a9:
                    8f:08:10:fe:24:90:03:0f:59:16:09:4b:3f:35:1e:
                    97:67:1c:d4:1e:b1:bf:2a:16:13:f6:27:7a:ee:f7:
                    6e:ff:38:24:9b:bd:28:c6:c0:cc:5f:7c:a1:6c:cb:
                    92:b1:4f:a9:50:6d:33:cb:96:cf:2c:eb:26:5c:5d:
                    cb:c1:3d:6f:58:3e:8f:45:39:0a:ed:43:e1:e7:aa:
                    5a:8c:2b:88:38:c7:36:6d:23:ba:37:d1:1e:1f:3e:
                    cc:07:33:a2:92:91:15:de:86:43:97:e8:2e:03:47:
                    16:9f:48:d1:71:42:16:60:11:9c:fe:ea:98:8f:fc:
                    eb:51:c2:f5:9e:c5:02:d9:ae:5d:51:34:14:1c:e6:
                    b5:59:f3:9b:40:1a:4d:13:43:8e:6f:dc:d9:3e:bd:
                    91:14:ac:67:c1:80:03:05:ef:e1:63:d7:fc:cb:24:
                    37:63
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha256WithRSAEncryption
         9e:c2:1d:e5:d8:53:56:dc:50:03:3e:a6:57:f4:f5:79:99:df:
         11:77:b1:77:76:06:e0:d4:0b:63:05:ec:f2:6c:50:8e:bf:cd:
         b7:fa:cb:27:20:ff:4c:84:b8:e2:da:90:d8:66:9d:73:7f:f1:
         b1:0e:09:6d:ab:0a:28:87:7c:ab:93:fa:aa:1e:ed:9a:bc:f1:
         a2:4b:8a:2b:ab:d3:0d:5c:7f:f3:c7:2d:16:03:fd:0b:8b:04:
         f5:ba:8b:6d:9b:8b:53:1f:72:42:75:69:11:35:e6:22:3e:21:
         94:43:fb:74:90:1c:0b:42:7a:fa:87:8f:45:59:2d:f8:0e:84:
         f6:36:cb:cc:80:a8:82:6b:c0:b1:88:30:ce:78:62:26:f2:02:
         10:d1:3f:8f:e4:a4:9e:88:ec:0a:12:9a:65:f6:2d:fa:f8:d5:
         a7:a7:80:e4:c6:3f:af:e9:27:67:0c:03:5a:21:7a:61:e5:cf:
         7e:8e:5e:87:9f:50:fe:e7:23:bc:c6:49:30:4b:1f:3d:a4:36:
         e1:35:84:ea:ce:38:74:2d:a9:e1:70:ab:fb:bd:81:ad:3c:aa:
         39:9b:93:c2:9e:bd:b9:1c:3f:5c:cf:5f:32:29:a3:ee:d1:04:
         09:bb:33:d4:79:d8:c7:f5:ce:b6:c6:5a:1d:0d:b1:45:c2:2a:
         7c:33:a5:8c
  • 証明書に関する処理には、「openssl x509」コマンドを使用します。

    x509というのは、証明書の規格になります。

  • 「-in」オプションで、詳しい内容を確認したいSSLサーバー証明書を指定します。

    ここでは、上記で作成したSSLサーバー証明書「server.crt」を指定しています。

  • 「-text」オプションを指定すると、SSLサーバー証明書の詳しい内容が出力されます。

  • 「-noout」オプションを指定すると、出力に上記のPEM形式のものが含まれなくなります。

CentOS7.2 64bit OpenSSLを使用して秘密鍵、CSRを作成し、自己署名のSSLサーバー証明書を作成については、以上です。

Linuxの基礎知識に関するおすすめの書籍

当サイトの書籍紹介ページで、Linuxの基礎知識に関するおすすめの書籍の紹介も行っておりますので、ご覧ください。

暗号技術に関するおすすめの書籍

当サイトの書籍紹介ページで、暗号技術に関するおすすめの書籍の紹介も行っておりますので、ご覧ください。