現在、WEBサーバを公開する際、サイト全体を常時HTTPS(HTTP over SSL/TLS)化することが一般的とされています。
上記の他にも、HTTP/2プロトコルによる高速化やSEO対策なども期待できます。
SSLの仕組み
当初、HTTPSを実装する技術はSSL(Secure Sockets Layer)でしたが、その後、セキュリティ上の問題を改善するために、TLS(Transport Layer Security)が誕生しました。基本的にはSSLとTLSは同じような技術と理解して問題ありません。
既に、SSL 1.0、SSL 2.0、SSL 3.0および、TLS 1.0、TLS 1.1は非推奨であり、現在ではTLS 1.2またはTLS 1.3(試験段階)のみが推奨されています。
共通鍵暗号方式と公開鍵暗号方式
HTTPS(HTTP over SSL/TLS)を実装するには、共通鍵暗号方式と公開鍵暗号方式の技術が利用されています。主な特徴は以下の通りです。
公開鍵暗号方式を実現するためのアルゴリズムにはさまざまなものがありますが、主にRSAまたは楕円曲線暗号が採用されます。
共通鍵暗号方式の暗号化アルゴリズムとしては主に以下の3点が有名です。
デジタル署名の仕組み
デジタル署名の技術によって証明書の正当性を証明(検証)することができます。デジタル署名は公開鍵暗号の他にハッシュ関数の技術が採用されています。
- SHA-1
- 脆弱性が確認されたため、現在は非推奨
- SHA-2
- ビット長ごとに、SHA-224、SHA-256、SHA-384、SHA-512の4種類がある
- 現在、推奨されているハッシュ関数、一般的にはSHA-256が採用される
- SHA-3
- 2015年にリリースされた次世代ハッシュ関数、将来的には普及する見込み
なお、デジタル証明書の基本的な仕組みは以下の通りです。
主にWEBクライアントがWEBサーバから受け取った証明書(SSLサーバ証明書および中間証明書)が正規の証明書であるかを判断する際に利用される技術です。
最低限のセキュリティ要件
2010年代以降、最低限のセキュリティ要件は以下の通りです。
SSL証明書の種類
ルート証明書はクライアント(WEBブラウザ)側に予めインストールされているのに対して、サーバ証明書および中間CA証明書については、httpsアクセス時にWEBサーバ側からクライアント側に送られます。
有名な認証局
有名企業の証明書情報
有名企業の証明書情報を調べてみました。調べた企業の中では全て、X.509フォーマットのV3が採用されていました。
発行先 | 発行者 | 署名アルゴリズム | 署名ハッシュアルゴリズム | 公開キー |
---|---|---|---|---|
Apple | Apple | sha256RSA | sha256 | RSA |
GTS | sha256RSA | sha256 | ECC(ECDSA) | |
Mocrosoft | Mocrosoft | sha256RSA | sha256 | RSA |
DigiCert | sha256RSA | sha256 | ECC(ECDSA) | |
Amazon | DigiCert | sha256RSA | sha256 | RSA |
ヤフー | Cybertrust | sha256RSA | sha256 | RSA |
LINE | GlobalSign | sha256RSA | sha256 | RSA |
メルカリ | GlobalSign | sha256RSA | sha256 | RSA |
GoogleやMicrosoftのような海外の大企業では自社で証明書を発行している企業もありますが、基本的には認証局に証明書発行を依頼している企業が多かったです。
大企業では企業実在拡張認証型の証明書を採用することが多いかと思っていましたが、企業実在拡張認証型の証明書を採用している企業は意外と少なかったです。
一般的なSSL通信の仕組み
SSL通信時、WEBサーバとWEBクライアント(WEBブラウザ)との間では、以下のようなやり取りが行われています。
- 手順1HTTPSリクエスト(WEBブラウザ→WEBサーバ)
- WEBブラウザからWEBサーバへ[https://]によるアクセスを開始
- 手順2SSLサーバ証明書を送信(WEBサーバ→WEBブラウザ)
- WEBサーバから以下の情報をWEBブラウザ側へ送信
- 中間CA証明書および中間認証局の公開鍵
- SSLサーバ証明書およびWEBサーバの公開鍵
- WEBサーバから以下の情報をWEBブラウザ側へ送信
- 手順3ルート証明書による照合(WEBブラウザ)
- ルート認証局の公開鍵で中間CA証明書を復号化して中間認証局の公開鍵を取り出す
- 中間認証局の公開鍵でSSLサーバ証明書を復号化してWEBサーバの公開鍵を取り出す
- 共通鍵を生成しWEBサーバの公開鍵で暗号化してWEBサーバへ送信する
- 手順4共通鍵の送信(WEBブラウザ→WEBサーバ)
- WEBブラウザにて暗号化された共通鍵を送付する
- 暗号化した共通鍵をWEBサーバに送信
- 手順5共通鍵による通信(WEBサーバ)
- 共通鍵を秘密鍵で復号する
- 手順6共通鍵による通信(WEBブラウザ⇔WEBサーバ)
- WEBブラウザによって作成された共通鍵いより暗号化通信を実現
X.509証明書のフォーマット
X.509証明書のフォーマットは以下の通りです。

証明書の正当性を検証する仕組み
証明書の正当性を検証するには、
- 証明書の署名部分を認証局の公開鍵で復号したハッシュ値
- 証明書のデータ部分をハッシュ化したハッシュ値
が一致していることを確認する必要があります。
証明書チェーンの仕組み
実際には、証明書チェーンにより、ルート証明書、中間証明書、SSL証明書により構成されているため、もう少し複雑です。
まず、ルート証明書およびルート認証局の公開鍵はWebクライアント(ブラウザ)にあらかじめプリインストールされています。
次に、中間証明書をチェックするには、
- 中間証明書の署名部分をルート認証局の公開鍵で復号化したハッシュ値
- 中間証明書のデータ部分をハッシュ化したハッシュ値
が一致していることを検証する必要があります。
最後に、SSLサーバ証明書のチェックをするには、
- SSLサーバ証明書の署名部分を中間認証局の公開鍵で復号したハッシュ値
- SSLサーバ証明書のデータ部分をハッシュ化したハッシュ値
が一致している必要があります。
ルート証明書および中間証明書の関係性などについては以下の記事が参考になりました。


クロスルート証明書の仕組み
Webクライアント側のルート証明書が最新でない場合、取得した中間証明書の正当性を正しく検証できない可能性があります。
クロスルート証明書を利用することで、(古いルート証明書も含め)複数のルート証明書での検証が可能になります。
証明書失効リストとOCSP
証明書の秘密鍵の流出(危殆化)により、有効期限より前に証明書を失効させる必要がある場合は、証明書失効リスト(CRL/Certificate Revocation List)に登録して管理します。
また証明書の有効性をリアルタイムで確認する場合は、OCSP(Online Certificate Status Protocol)による確認が有効です。
SSL証明書の運用方法
Windows(IIS)によるサーバ証明書の構築手順
IIS(Internet Information Services)によるサーバ証明書の一般的な構築手順は以下の通りです。
- 手順1CSRファイル(Certificate Signing Request)の作成(WEBサーバ)
- IISよりCSRを作成する
- 国名、住所、組織名、部門名、コモンネームを入力する
- 暗号化の種類、ビット長を入力する
- 必要に応じてTSV形式に変換する
- CSRには公開鍵の情報も含まれる
- IISよりCSRを作成する
- 手順2SSLサーバ証明書の発行申請を送る
- 認証局に対して証明書の発行申請書を送る
- 手順3SSLサーバ証明書を受け取る
- 認証局側にて発行申請書をもとに証明書を作成する
- 認証局より証明書を受け取る
- 手順4中間CA証明書を取得、インストールする
- 認証局のホームページなどから中間証明書をダウンロードする
- 中間CA証明書の更新が無い場合は不要
- 中間証CA明書をインストールする
- ダウロードした中間CA証明書を実行する
- 証明書インポートウィザードより保存場所を設定する
- 認証局のホームページなどから中間証明書をダウンロードする
- 手順5IISマネージャーよりSSLサーバ証明書をインストールする
- 新しい証明書をインストールする
- 古い証明書をバックアップ(エクスポート)および削除する
- 新しい証明書を設定(サイトバウンド)する
Linux(Nginx/Apache) によるサーバ証明書の構築手順
Linuxサーバでのサーバ証明書の構築手順は以下の通りです。基本的な流れはIISとそれ程変わらないです。
- 手順1CSRファイル(Certificate Signing Request)の作成
- 必要なパッケージをインストールする
- 秘密鍵を作成(opensslコマンド)
- CSR(証明書署名要求)の作成(opensslコマンド)
- CSRには公開鍵の情報も含まれる
- 手順2SSLサーバ証明書の発行申請を送る
- 認証局に対して証明書の発行申請書を送る
- 認証局側にて発行申請書をもとに証明書を作成する
- 手順3SSLサーバ証明書の発行申請を送る
- 認証局より証明書を受け取る
- 手順4中間CA証明書を結合する
- 必要に応じて中間CA証明書とSSL証明書を結合する
- WEBサーバの仕様により異なる
- 必要に応じて中間CA証明書とSSL証明書を結合する
- 手順5WEBサーバ上に保存し、設定ファイルで定義する
- SSLサーバ証明書、中間CA証明書を任意のディレクトリに保存する
- Webサーバの設定ファイルで各種証明書の保存場所を定義する
- Webサーバを再起動する
Linuxサーバ側での必要なパッケージ
LinuxサーバでHTTPS(SSL/TLS)を構築するには以下のパッケージをインストールする必要があります。
- OpenSSL…SSL/TLSの機能を提供する、opensslコマンドが利用できる
- mod_ssl…ApacheをSSLに対応させる、インストール時にssl.confが自動作成される
ファイル形式の種類と関連用語
ファイル形式と関連技術を簡単にまとめてみました。
ファイル形式/用語 | 内容 |
---|---|
CSR(証明書発行要求/Certificate Signing Request) | CSRを認証局に送り証明書を発行する |
TSV(Tab Separated Values) | タブ区切りのファイルの形式 |
DER(Distinguished Encoding Rules) | DERでエンコーディング(符号化)されたバイナリ形式(証明書の形式) |
PEM(Privacy Enhanced Mail) | Base64でエンコーディング(符号化)されたテキスト形式(証明書の形式) |
CRT | 証明書、主にLinux系で採用される |
CER | 証明書、主にWindows系で採用される |
PKCS12(Public-Key Cryptography Standards/p12) | 証明書と秘密鍵の組み合わせ バイナリ形式 古い証明書をバックアップする際などにも作成 |
pfx(Personal Information Exchange) | PKCS#12の旧称 |
X.509 | デジタル証明書、証明書失効リストのデータ形式を定めた標準規格 |
自己証明書(オレオレ証明書)の作成手順
自己証明書はオレオレ証明書とも呼ばれます。証明書の作成を外部の認証局に依頼せずに、自身のサーバ内で作成する仕組みです。
WEBサーバを外部公開するのであれば、外部の認証局より正式な証明書を取得することになりますが、社内環境や検証環境などでは、自己証明書(オレオレ証明書)を利用することもあります。
作成手順は以下の通りです。
秘密鍵、CSR(証明書署名要求)、証明書の作成手順
主に以下の4ステップにより自己証明書(オレオレ証明書)を構築します。
- 秘密鍵を作成(opensslコマンド)
- CSR(証明書署名要求)を作成(opensslコマンド)
- SSLサーバ証明書の作成(opensslコマンド)
- Webサーバの設定ファイルで秘密鍵および証明書の保存場所を定義し、サービス再起動
opensslコマンドはサブコマンドやオプションの種類が豊富ですが、まずは最低限のオプションを把握できれば良いでしょう。
opensslコマンドのオプション
サブコマンド | オプション | 内容 |
---|---|---|
openssl genrsa | 秘密鍵の作成 | |
-out | 出力する秘密鍵のファイル名(リダイレクトでも指定可能) | |
-aes256 | 暗号化方式(DES、DES3、AESなどが利用可能) | |
openssl req | CSRの作成 | |
-new | 新規CSR作成 | |
-key | 入力する秘密鍵のファイル名 | |
openssl x509 | サーバー証明書の作成 | |
-days | 証明書の有効期限 | |
-signkey | 署名に使い秘密鍵 |
秘密鍵の作成
秘密鍵はopenssl genrsaコマンドで作成します。ファイル名は[server.key]とします。
[root@localhost conf]# openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus (2 primes)
.........................................+++++
............+++++
e is 65537 (0x010001)
Enter pass phrase:(パスフレーズを入力)
Verifying - Enter pass phrase:(もう一度、同じパスフレーズを入力)
[root@localhost conf]#
opensslコマンドで中身を確認できます。
[root@localhost conf]# openssl rsa -in server.key -text -noout
Enter pass phrase for server.key:(パスフレーズを入力)
RSA Private-Key: (2048 bit, 2 primes)
modulus:
00:ca:bc:46:58:92:46:a2:8c:3e:41:63:2a:9b:23:
(省略)...............................................
b1:29
publicExponent: 65537 (0x10001)
privateExponent:
66:54:07:91:b7:2b:4d:ea:49:96:09:6e:bc:e5:a5:
(省略)...............................................
81
prime1:
00:e7:6d:fd:2f:10:2e:f8:1b:6f:82:95:1b:02:fb:
(省略)...............................................
5c:36:e0:dd:16:9a:76:6c:19
prime2:
00:e0:42:68:7b:43:c9:1d:5a:89:f4:44:9e:64:f1:
(省略)...............................................
0d:64:08:26:86:af:50:0f:91
exponent1:
6c:8c:4f:4b:8a:c8:ad:00:99:4d:e3:47:d7:1f:58:
(省略)...............................................
2c:ea:4d:68:b3:ac:45:c9
exponent2:
00:a5:95:a3:1b:d0:d3:40:8f:47:69:4a:f9:41:43:
(省略)...............................................
21:90:08:cc:99:89:fc:ad:61
coefficient:
66:7a:4c:77:e8:b8:4e:a2:b4:76:21:6d:b7:87:b6:
(省略)...............................................
ec:4f:69:ea:c6:85:bf:40
[root@localhost conf]#
catコマンドで中身を確認することもできます。
[root@localhost conf]# cat server.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,721FC6A95326E69836E5BC7A8D8CBF29
hE4iMooZud9U6h4YEUonjk4I6XquIzBiebX4Ihu0iYmZy4/1H18fctLgzUuY/5Lj
(省略)...............................................
0J+hqGDNrLZFpWefP1ujyF1qU6ySfgeCr2XE4Rz2X6hsWS+ZerGomor+bw2Ny87H
-----END RSA PRIVATE KEY-----
[root@localhost conf]#
2021年にリリースされたOpenSSL 3.0以降、genrasサブコマンドは非推奨になり、代わりにgenpkeyを利用するようです。
[root@localhost conf]# openssl genpkey -aes128 -out server.key -algorithm RSA -pkeyopt rsa_keygen_bits:2048
...........................................................................+++++
.+++++
Enter PEM pass phrase:(パスフレーズを入力)
Verifying - Enter PEM pass phrase:(もう一度、同じパスフレーズを入力)
[root@localhost conf]#
opensslコマンドで中身を確認できます。
[root@localhost conf]# openssl rsa -in server.key -text -noout
Enter pass phrase for server.key:
RSA Private-Key: (2048 bit, 2 primes)
modulus:
00:c6:ca:28:fe:d4:00:6f:87:37:8a:e8:2f:37:af:
(省略)...............................................
ce:31
publicExponent: 65537 (0x10001)
privateExponent:
45:5b:af:a6:09:ae:05:3b:b6:63:5e:d3:6a:a8:75:
(省略)...............................................
e1
prime1:
00:f2:63:e9:9f:37:98:c3:4a:bf:2b:dc:b1:da:0d:
(省略)...............................................
88:48:4d:61:17:ee:a8:e2:0d
prime2:
00:d1:f3:89:bf:cf:f7:d2:6c:3a:c9:ae:18:b1:54:
(省略)...............................................
a7:7d:da:7e:64:ad:4f:27:b5
exponent1:
71:84:d3:74:2a:d0:93:9d:dd:1c:88:b6:8e:bd:e7:
(省略)...............................................
e0:69:c4:f0:35:68:c8:bd
exponent2:
00:b2:39:2b:99:01:60:dd:66:74:ad:19:b5:ea:6b:
(省略)...............................................
6c:7d:40:8a:04:ca:be:23:f5
coefficient:
00:e4:53:4c:97:55:c7:cd:cd:1d:38:29:07:41:58:
(省略)...............................................
10:31:22:74:d5:a2:d9:7d:9c
[root@localhost conf]#
catコマンドで中身を確認することもできます。
[root@localhost conf]# # cat server.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,99F3789085E27A4ABAD3EF9A8B834291
uYe/ctq07dYjEblmfP4UFemGP0fwpu5cCvptnsqPoA8XthoIzuWZOGRgGpNzYjFC
(省略)...............................................
tgbyL8AFoobvv8N2WuHWVcg0RuHE2ML83MFy59rFa3GayD7FEpjaNBt3bjKL5kFF
-----END RSA PRIVATE KEY-----
[root@localhost conf]#
なお、OpenSSLのバージョンは openssl version コマンドで確認できます。
[root@localhost conf]# openssl version
OpenSSL 1.1.1k FIPS 25 Mar 2021
[root@localhost conf]#
CSR(証明書署名要求)を作成
先ほど作成した秘密鍵をもとにCSR(証明書署名要求)を作成します。ファイル名は[server.csr]とします。
なお、あらかじめ、/etc/pki/tls/openssl.cnfに情報に必要な情報を定義しておくことで、 CSR(証明書署名要求) 作成時の対話入力を簡略化(省略)できます。
対話式で必要な情報を入力します。入力必須の項目と未入力可の項目とがあります。ここで入力した内容はSSLサーバ証明書内の所有者情報(サブジェクト)から確認できます。
[root@localhost conf]# openssl req -new -key server.key > server.csr
Enter pass phrase for server.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) [XX]:JP
State or Province Name (full name) []:Osaka
Locality Name (eg, city) [Default City]:Osaka-City
Organization Name (eg, company) [Default Company Ltd]:(未入力でも可)
Organizational Unit Name (eg, section) []:(未入力でも可)
Common Name (eg, your name or your server's hostname) []:example.com
Email Address []:info@example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(未入力でも可)
An optional company name []:(未入力でも可)
[root@localhost conf]# cat server.csr
-----BEGIN CERTIFICATE REQUEST-----
MIICzTCCAbUCAQAwgYcxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVPc2FrYTETMBEG
(省略)...............................................
FQ==
-----END CERTIFICATE REQUEST-----
[root@localhost conf]#
opensslコマンドで中身を確認できます。
[root@localhost conf]# openssl req -in server.csr -text -noout
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C = JP, ST = Osaka, L = Osaka-City, O = Default Company Ltd, CN = example.com, emailAddress = info@example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:ca:bc:46:58:92:46:a2:8c:3e:41:63:2a:9b:23:
(省略)...............................................
b1:29
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: sha256WithRSAEncryption
8d:44:99:f5:d7:4f:6b:b3:5a:b0:1a:3a:c8:ca:0a:46:44:26:
(省略)...............................................
f4:50:60:15
[root@localhost conf]#
catコマンドで中身を確認することもできます。
[root@localhost conf]# cat server.csr
-----BEGIN CERTIFICATE REQUEST-----
MIICzTCCAbUCAQAwgYcxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVPc2FrYTETMBEG
(省略)...............................................
FQ==
-----END CERTIFICATE REQUEST-----
[root@localhost conf]#
自己証明書を作成
先ほど作成したCSR(証明書署名要求)をもとに自己証明書を作成します。ファイル名は[server.crt]とします。
[root@localhost conf]# openssl x509 -in server.csr -days 36500 -req -signkey server.key > server.crt
Signature ok
subject=C = JP, ST = Osaka, L = Osaka-City, O = Default Company Ltd, CN = example.com, emailAddress = info@example.com
Getting Private key
Enter pass phrase for server.key:(パスフレーズを入力)
[root@localhost conf]# cat server.crt
-----BEGIN CERTIFICATE-----
MIIDmTCCAoECFFxL9uil3JVWtZcyKEH1Z6BPrEG/MA0GCSqGSIb3DQEBCwUAMIGH
(省略)...............................................
41wHh/l4m0RO9vojyA==
-----END CERTIFICATE-----
[root@localhost conf]#
opensslコマンドで中身を確認できます。
[root@localhost conf]# openssl x509 -in server.crt -text -noout
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
5c:4b:f6:e8:a5:dc:95:56:b5:97:32:28:41:f5:67:a0:4f:ac:41:bf
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = JP, ST = Osaka, L = Osaka-City, O = Default Company Ltd, CN = example.com, emailAddress = info@example.com
Validity
Not Before: Jan 7 06:38:38 2022 GMT
Not After : Dec 14 06:38:38 2121 GMT
Subject: C = JP, ST = Osaka, L = Osaka-City, O = Default Company Ltd, CN = example.com, emailAddress = info@example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:ca:bc:46:58:92:46:a2:8c:3e:41:63:2a:9b:23:
(省略)...............................................
b1:29
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
4e:cd:67:04:71:c1:c2:ed:3d:bc:d2:a7:a7:0a:eb:91:81:81:
(省略)...............................................
f6:fa:23:c8
[root@localhost conf]#
catコマンドで中身を確認することもできます。
[root@localhost conf]# cat server.crt
-----BEGIN CERTIFICATE-----
MIIDmTCCAoECFFxL9uil3JVWtZcyKEH1Z6BPrEG/MA0GCSqGSIb3DQEBCwUAMIGH
(省略)...............................................
41wHh/l4m0RO9vojyA==
-----END CERTIFICATE-----
[root@localhost conf]#
秘密鍵のパスフレーズ解除
秘密鍵にパスフレーズを設定していると、Apacheなどのサービスを起動するたびに、パスフレーズの入力を求められます。パスフレーズの解除方法は以下の通りです。
[root@localhost conf]# cp -p server.key server.key.org
[root@localhost conf]# openssl rsa -in server.key -out server-nopass.key
Enter pass phrase for server.key:(パスフレーズを入力)
writing RSA key
[root@localhost conf]#
パスフレーズ解除後もopensslコマンドにより、秘密鍵の情報を確認できます。パスフレーズの入力が求められなくなりますが、それ以外の内容は同じのようです。
[root@localhost conf]# openssl rsa -in server-nopass.key -text -noout
RSA Private-Key: (2048 bit, 2 primes)
modulus:
00:ca:bc:46:58:92:46:a2:8c:3e:41:63:2a:9b:23:
(省略)...............................................
b1:29
publicExponent: 65537 (0x10001)
privateExponent:
66:54:07:91:b7:2b:4d:ea:49:96:09:6e:bc:e5:a5:
(省略)...............................................
81
prime1:
00:e7:6d:fd:2f:10:2e:f8:1b:6f:82:95:1b:02:fb:
(省略)...............................................
5c:36:e0:dd:16:9a:76:6c:19
prime2:
00:e0:42:68:7b:43:c9:1d:5a:89:f4:44:9e:64:f1:
(省略)...............................................
0d:64:08:26:86:af:50:0f:91
exponent1:
6c:8c:4f:4b:8a:c8:ad:00:99:4d:e3:47:d7:1f:58:
(省略)...............................................
2c:ea:4d:68:b3:ac:45:c9
exponent2:
00:a5:95:a3:1b:d0:d3:40:8f:47:69:4a:f9:41:43:
(省略)...............................................
21:90:08:cc:99:89:fc:ad:61
coefficient:
66:7a:4c:77:e8:b8:4e:a2:b4:76:21:6d:b7:87:b6:
(省略)...............................................
ec:4f:69:ea:c6:85:bf:40
[root@localhost conf]#
一方、catコマンドで確認すると、ファイルの中身はパスフレーズ有りのものと異なるようです。
[root@localhost conf]# cat server-nopass.key
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAyrxGWJJGoow+QWMqmyPTrnOlgtKwrB4QN8tswDzEjZ2ty+VK
(省略)...............................................
4PR3dEYPOtHhpIApye9OA4hzxLjdwbY5q5zxo/LiduxPaerGhb9A
-----END RSA PRIVATE KEY-----
[root@localhost conf]#
秘密鍵、CSR(証明書署名要求)、証明書(自己証明書)などの作成については、以下の記事が参考になりました。



設定ファイルの修正
上記で作成した秘密鍵および各種証明書を設定ファイルで定義します。
ApacheとNginxで設定ファイルおよび定義項目が微妙に異なります。
Apache | Nginx | |
---|---|---|
設定ファイル | /etc/httpd/conf.d/ssl.conf | /etc/nginx/nginx.conf |
証明書 | SSLCertificateFile | ssl_certificate |
秘密鍵 | SSLCertificateKeyFile | ssl_certificate_key |
中間証明書 | SSLCertificateChainFile | ー |
Apacheの場合、SSLの設定ファイル(/etc/httpd/conf.d/ssl.conf)を編集します。 SSLの設定ファイル(/etc/httpd/conf.d/ssl.conf) はmod_sslをインストールしたタイミングで自動的に作成されます。
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/server-nopass.key
Nginxの場合、設定ファイル(/etc/nginx/nginx.conf)に以下の情報を追記(コメントアウトして編集)します。
server {
listen 443 default ssl;
ssl on;
ssl_certificate "/etc/httpd/conf/server.crt";
ssl_certificate_key "/etc/httpd/conf/server-nopass.key";
}
なお、NginxおよびApacheの2.4.8以降では、中間CA証明書の設定値であるSSLCertificateChainFileディレクティブは廃止(非推奨)になっているため、サーバ証明書の末尾に中間CA証明書を追記して、SSLCertificateFileディレクティブにて定義する必要があります。
まとめ
SSL/TLSの仕組みや証明書の構築手順には関連する知識が多く、とても難しく感じます。最低限、この辺りの知識を理解することで、全体像が分かると思います。
- SSL/TLSの目的、役割、必要性
- 各技術の推奨バージョン、暗号化アルゴリズム、鍵長など
- 共通鍵暗号方式と公開鍵暗号方式(デジタル署名)の特徴、違い
- 証明書の仕組み、認証局の役割、証明書チェーンの仕組み
- X.509証明書のフォーマット(内容)
- クロスルート証明書、証明書失効リストは後回しで良い
- 自己証明書(オレオレ証明書)の仕組み、実際に構築してみる
一番有効な勉強方法は自己証明書(オレオレ証明書)を構築しながら、不明点を解消していくことだと思いました。
また、前提知識として、Webサーバ(ApacheまたはNginx)とDNSサーバ(BIND)の最低限の知識は必要です。
コメント