kakiro-webカキローウェブ

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

CentOS6.7 64bit OpenSSLを使用したSSL用の秘密鍵と証明書の作成

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

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

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

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

※CentOS7 64bitをご使用の場合は、当サイトのCentOS7 64bit OpenSSLを使用して秘密鍵、CSRを作成し、自己署名の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-----
MIIEpAIBAAKCAQEA0E1M6xZEB46z8rpS0u9R0NMwfSiti0b4scSxxef3Z6HLVMVZ
OWenqkibi/hxLsTRtmrn/ZixdJR+xGjeUla+ZwXUo0BwR8j7SBiSx1GHmgnnC9x0
faYyJwHK3nlycFPLCmnLVll1P5BJg8nwcPZfFf8W/NK7D4qI3SmqTsdRy6SD+n16
UI13GXCGFDqg85VCV1XSh0YKJXX5AAWf2A0/v68Bv4JJjalBKnBcp98Ymf4JrvpW
qWcWa4hXMsvILxkZML9rn6tHe0E+WyIu/kN3BaWEXY1V62p5PmPj3eVUiWXbUVQd
3qvNf3UxlyM4XzMXQrvZoNHdlNDZLsBWusHpBwIDAQABAoIBAQCnczy+T2vo12L5
YadrQk/3G48DTkwUhr0tyv1OJyfP+1TFlNAhQZ6bWTsRzmrOOhKMHmzYhINDQIyX
v+XZMzpk/17szcR1MLAwSPDVokjsH8HI2zQaPhxbFynKpr7EZdf3SwzXIZsLuiYe
95t+c9AEksgb/hu6ZpeXkwMByWGL3gTjso9tPl04b64rtAlJ666a8KA9keKVQYG5
wMa8bUKm+xUwyT3p0gQ66nhhoI9tujJ3KWwl85A2tQC73tluqkYXOsL0lGH8XyG7
9un1WGb9FafVX6OFLTiV2ZI5S+DNntRWoNkydka3g4OKnJg5WhygdiGr2ebD9yIF
Gge58xQBAoGBAPYaUWyBHDoeA9v1KwCh+WAzAh+ay9HDJtHvsIap3FgNnIO+F2Vh
CrKK0sqY79uGbAjp61pwPRlNpQjZsUzuNI8glU9la0fDS9HLb6EsovRkiS2pqMJd
lRzorDhSmLItIJzOx77FXMDRzqNx/I/g60oGsTplVWYzjib5FaeD+BuHAoGBANit
0H3/46Fb2GOgrFvGkuunMpU2wQH8K1D+As0ed4Df5TkzUas6wAlXiATK1+jTsZEy
Y+NKBFlQKiLJSzPp5VAncgjfMUrWaRTPLKVHEjaHFPe9cFdG7MrvD+SEuDSxDg3V
YauG7xrC3VURndRzEti/emRKdFk5gN1CulipqiaBAoGBAKhcBMv333mawwUcydha
9qDrBE7etQTBPrNsCBV36reKSEKQLq06H/lYoy/aRGynnwzSCiIKmqHOzlIpqvN4
Ghi4L6zrMuMbJalWRP277ZbHmFjWsg6VusbWHctCJhfua1sa0ucdWYDHh1elSSSc
uBoiTegnHq8WIe9jg37f90HNAoGAI8AB31gh+ZSKzl1LMtU/lmv+t4nSLH6rsvBG
DAvT0cqfKmHiPqsx1hjAE3JYT0zmRjuXKYAj2YyVdynZI5aaxC/N69LPcjaQHePU
zOw+AAsnlXyHFY9ZMF5jM+QF9IOl+vhS5hccSkEOfaOrc8sMuABXtEZojfQj493H
mytbLIECgYBHEJ2yUMey91SPUViG530LvRp8eGcgM7Uzqo6JqK1THJZZkPq0rlBG
etMRDpez/t2zgXA5JusbIyQq/3YM2b92ie/U6g6NfZHjoFJXZKqOPRyBrEEDfmQc
S/N6mPw63tgHW5I84yhQ32xlH/MHV++tjjyyDqZR+OFz9I91rQYK9w==
-----END RSA PRIVATE KEY-----

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

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

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

# openssl rsa -in server.key -text -noout
※出力は割愛します。
  • 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,8AD7ACE014A85BC25ED168C2487668B9

ZAnhNAVKeHbdeIIziQJ8hvXAscRqBLbzBV4D/+VpisL3t9bvTAJlKTlGP7ETv9Hx
aAoSWBhEQsKbkmR+mOGmL/KdBfBXqrzBgoYHD1+2m2WmJAIHkPcqNBDlyHa2RTBG
IfW0CLKeJ708xblTqpntJhLbkYiTWMgkqRpfuUQxpeIIR2KqVWOdW5880GgP6Z8N
s0wCRNrqTGEYpTcEuadVEqUFyHonvz0kxikSLOqHKUgsKkXwPwpWTLC2OHJa/ci9
HnQWVHV5jPE9rru7lbGUWCJYuVr6ygwUcBMPFpHksD4F0jS79r1mdRa+tuveWlyp
nR8Ray7sVszou1O7HUwb69nDZmDwWi3UQzfMf06b4rT8ySbCGe5+U/YGzB4KJgkz
FOp4e4vUlXUgGX6UTx1oKmG79RfvtBSFS04ypDcjsXoASjXCaNAiWZXfanC9S8p8
Z0Q7iFFcmJRv4UOdy080sr9/EZ/a7Qe8Yp2xA+GVsAoLz4WCGHiLZ+37vPcJkE1j
5i0MBOojh4AMad0Wwpyqoj/6SOqAiX1VeLTmqiLL0KM/jqdgY8unxLheWJDYOHTc
45ejrj1Yog80oRyJ8eFu3Qo8ag5YSWQZgamdUh40rs/l2dXnFkPadKe2CAt2SFDK
Lv6vQmzUWnZ8eMIGc+pB3laRcRAb8jGLFYAZH6m9fyk7KwkJW/Sec9fMVprDWJqP
eBp7FZz3U3YCw4RFsiAcTSptsjRFKQyE1NFDCMq5MY4dX5RtVPn6viiYrWJfySeP
SDgfenmLHV+yU+semgPufATE3oVVw5cEjIT2Jh2exuxBsSvT2uxs+itnjkBAbjBi
30PXB7hTjtCSEIbx1AL2/3nSuCy1rGWDRuBT1R3FJX+/D9jpcRwyk44a1iVNmfLE
YR0njNtRh9/TW6DZReDM/GxZyfP3gathDBURHvaVqchqn4Mi9ZpHHV/rATzOmmyh
ZM0H2rThw82sWMA4K3XPuh3A8scNWwoo+iUXemq/m1VDv5nkl6gHv56EDilFNet0
5RcogQrYPmNp3lDJbrA4Shb2hMpEVpEQ/tg2YrfQuyDEm24UFDsERsvTOzdpIEtu
1+/imqnPItJRM98rs413W0Sl4LWTtSOpzknw1q1fipV6uiBpuBRB4sV2w8WiDFVd
UTbvY4vD8ZPzsxNLmWmKDK69Ht6YgRuKe1WBK+RYiyPKzjjxZMIZZNs0dpSHc9qj
CUNip4GQGSEESQz8hLhi+iQjz9maE6X3rQhtV35dvpAYOMrrRU98JEDq4c248BsY
xNUqajCLTDOC63MBM2mIf+pXffuf8l3h8VXo242gvUvsI+8sCMT+fxe+YHF1A9ff
K/MYosES6PTs5M7+JxRL2TbIX69jWXRzK2lXNvow3LfjsLt06ykgrYAoS/G1WKWB
LZ145ZXa9663edra6IHi1k6exr0sf0lmZZQePZuL5bBb9PMh/cJCUumaxHbttayr
ObXiNfqdDnfKzP2WGNbw6+48FLVtG4marSFb3UUQ3U63Aa+/A7k5YWivym97Hhpp
gBII3eYW8NpwlWqjNfq1BXSqwOlm4YDUpSbeVNwwfzPBzowi6QIXyx32wNMWwDtT
-----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
MIIBCgKCAQEA0E1M6xZEB46z8rpS0u9R0NMwfSiti0b4scSxxef3Z6HLVMVZOWen
qkibi/hxLsTRtmrn/ZixdJR+xGjeUla+ZwXUo0BwR8j7SBiSx1GHmgnnC9x0faYy
JwHK3nlycFPLCmnLVll1P5BJg8nwcPZfFf8W/NK7D4qI3SmqTsdRy6SD+n16UI13
GXCGFDqg85VCV1XSh0YKJXX5AAWf2A0/v68Bv4JJjalBKnBcp98Ymf4JrvpWqWcW
a4hXMsvILxkZML9rn6tHe0E+WyIu/kN3BaWEXY1V62p5PmPj3eVUiWXbUVQd3qvN
f3UxlyM4XzMXQrvZoNHdlNDZLsBWusHpBwIDAQABoAAwDQYJKoZIhvcNAQEFBQAD
ggEBACQIK20ASuzsij49pByoAbZ2887uM+36y3ibDM/LCBYUYPRA4MULHBMHC4gA
earJ+qtMjRDf2kHdlQz9LPIiATsjxq2Ghwv5jA9hFdbNr05RUXfY1tTsvXDYtKSL
JAzQXA+qb39WGMbklkNQYcJ915JbOfstXNWfUPVNkbH6Cl/UfsPvhngtCZ3f8I3k
UZyJfkreXh6VXv2z3igMqaEJYnfy9XfuQdwBbNAmq0fZXMi1pPot06kbm/E/K+pA
O/mhirgSKFeLgx85JBvcTI1SceQZy2QfUv73vnnlQb00LA5CBopwPtxr3sr13KTp
c7xDMggbTLLcZZDuJHe3n9iwsaE=
-----END CERTIFICATE REQUEST-----

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

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

# openssl req -in server.csr -text -noout
※出力は割愛します。
  • 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日(約10年)にしています。

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

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

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

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

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

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

-----BEGIN CERTIFICATE-----
MIIDsjCCApoCCQDXlUgN/A44BDANBgkqhkiG9w0BAQsFADCBmjELMAkGA1UEBhMC
SlAxFTATBgNVBAgMDEV4YW1wbGVTdGF0ZTEYMBYGA1UEBwwPRXhhbXBsZUxvY2Fs
aXR5MRwwGgYDVQQKDBNFeGFtcGxlT3JnYW5pemF0aW9uMSIwIAYDVQQLDBlFeGFt
cGxlT3JnYW5pemF0aW9uYWxVbml0MRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20w
HhcNMTYwNTE5MTM1NDM4WhcNMjYwNTE3MTM1NDM4WjCBmjELMAkGA1UEBhMCSlAx
FTATBgNVBAgMDEV4YW1wbGVTdGF0ZTEYMBYGA1UEBwwPRXhhbXBsZUxvY2FsaXR5
MRwwGgYDVQQKDBNFeGFtcGxlT3JnYW5pemF0aW9uMSIwIAYDVQQLDBlFeGFtcGxl
T3JnYW5pemF0aW9uYWxVbml0MRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20wggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQTUzrFkQHjrPyulLS71HQ0zB9
KK2LRvixxLHF5/dnoctUxVk5Z6eqSJuL+HEuxNG2auf9mLF0lH7EaN5SVr5nBdSj
QHBHyPtIGJLHUYeaCecL3HR9pjInAcreeXJwU8sKactWWXU/kEmDyfBw9l8V/xb8
0rsPiojdKapOx1HLpIP6fXpQjXcZcIYUOqDzlUJXVdKHRgoldfkABZ/YDT+/rwG/
gkmNqUEqcFyn3xiZ/gmu+lapZxZriFcyy8gvGRkwv2ufq0d7QT5bIi7+Q3cFpYRd
jVXrank+Y+Pd5VSJZdtRVB3eq81/dTGXIzhfMxdCu9mg0d2U0NkuwFa6wekHAgMB
AAEwDQYJKoZIhvcNAQELBQADggEBAEnSx6sMgfL6klphStxXMOIRikCK9u3VPPEm
LQIKCdvSIr1EerV6liX7pGVb8DOTcaLPzJoZzj/f3njH0R55PcSPmGk0lBen8FDi
R1V7vkOEdx/broP89b79LE9zSy2lbQnDu7DFq6NxzvMQGi++8NHcYp/wEG6uVZkq
7cUk44YeV1dvRiaT/uzU01jHuo+6lGK6hO8zBu2mwL7XLRSqVGkNXhkxc0lY/6eA
x3IgVPnb57wkNR4gDbqTuZnZc87eTuEPqbDQYRMEvAn44qpt4y1fJcDUvnKxb0AX
ioJlh+qP1XcwIdLIM71XGnPytnu+lT+kxKnNJD3d27gd5rvLJoU=
-----END CERTIFICATE-----

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

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

# openssl x509 -in server.crt -text -noout
※出力は割愛します。
  • 証明書に関する処理には、「openssl x509」コマンドを使用します。

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

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

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

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

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

秘密鍵と自己署名のSSLサーバー証明書を同時に作成

認証局によって署名されたSSLサーバー証明書を作成するには、サーバーで秘密鍵とCSR(Certificate Signing Request)を作成し、認証局にCSRを提出して、SSLサーバー証明書の作成を依頼しますが、外部には公開しない等の理由で公的な認証局による署名を必要としない場合は、CSRは作成せず、自己署名のSSLサーバー証明書を秘密鍵と同時に作成して利用することもできます。

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

# openssl req -x509 -newkey rsa:2048 -nodes -keyout server.key -sha256 -days 3650 -out server.crt
  • 「openssl req」コマンドは、CSRに関する処理となるのですが、「-x509」オプションを指定すると、自己署名の証明書が作成されるようになります。

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

  • 「-newkey」オプションで、作成する秘密鍵で使用する暗号方式を指定します。

    ここでは、「rsa:2048」と指定し、RSAの鍵をサイズ2048ビットで作成するようにしています。

    RSAは、公開鍵暗号で主に使用される暗号方式になります。

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

  • 「-nodes」オプションを指定すると、秘密鍵にパスフレーズを付けた暗号化は行われなくなります。

    このコマンドでは、秘密鍵にパスフレーズを付けて暗号化する際の、共通鍵暗号の方式を指定するオプションがないようですので、ここではパスフレーズを付けないようにしています。

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

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

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

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

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

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

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

    ここでは、有効期限を3650日(約10年)にしています。

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

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

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

コマンドの実行時に入力を求められる以下の項目については、ここではサンプル用の値を指定しています。公的な認証局に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 []:

CentOS6.7 64bit OpenSSLを使用したSSL用の秘密鍵と証明書の作成については、以上です。

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

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

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

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