Linux LPIC303対策 Webサーバー インフラ

【サーバー認証編】 RockyLinux8にてApache を使ってhttps通信できる環境を作る

TL;DR

前回の記事でApacheのWebサーバーを導入したので、今回はさらにmod_sslを導入する。

その後サーバー証明書を使って、Webサーバーを認証できるように設定していきます。

なぜサーバー証明書が必要か?

中間者攻撃を防ぐため

中間者攻撃

Webサーバーと利用者の間で行われる通信に割り込み、両者になりすますことで通信の盗聴や改ざんを行う攻撃手法。

httpsでの通信を開始するにあたって、クライアントがこれから通信しようとしている相手が意図したサーバーかどうか?を確認できなければ、データ自体は暗号化できていても機密情報が漏洩してしまいます。

これを防ぐためにhttps通信を開始する前に、クライアント側はこれから通信しようとしている相手が自分の意図した相手か?を確認するために必要となるのがサーバー証明書です。

Kanon

下の図で言うところの、「認証局の公開鍵でサーバー署名と公開鍵を確認」にて、これから通信しようとしている相手が意図した相手か?を検証するという感じです。

サーバー署名はサーバーの秘密鍵で暗号化されているので、これから通信しようとしているサーバーの公開鍵を使って復号できるかどうかで、意図した通信相手かどうかを確認するというわけです。

サーバー認証の流れ

Kanon

今回は上の図の一連のやりとりをやってくれる、mod_sslというモジュールをApacheに追加して、https通信を行うための設定を実践していきます。

mod_sslのインストール

[root@infrastudy ~]# yum -y install mod_ssl

秘密鍵の作成

[root@infrastudy ~]# openssl genrsa > server.key

以下のような結果になればOK

Generating RSA private key, 2048 bit long modulus (2 primes)
..............+++++
.......+++++
e is 65537 (0x010001)

証明書署名要求

[root@infrastudy ~]# openssl req -new -key server.key > server.csr

Country Nameなど聞かれるので、順に入力する。

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

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

6行目のCommon Nameにはサーバーのドメイン名を入力する。

署名する

[root@infrastudy ~]# openssl x509 -req -signkey server.key < server.csr > server.crt

うまくいけば、以下のように表示される。

Signature ok
subject=C = JP, ST = Osaka, L = osaka, O = hoge, OU = hogehoge, CN = www.example.com, emailAddress = hoge@gmail.com
Getting Private key

作成した秘密鍵を証明書を任意の場所へ配置する

[root@infrastudy ~]# mkdir /etc/httpd/conf/keys
[root@infrastudy ~]# mkdir /etc/httpd/conf/crt
[root@infrastudy ~]# mv server.key /etc/httpd/conf/keys/
[root@infrastudy ~]# mv server.crt /etc/httpd/conf/crt/

配置した秘密鍵と証明書の場所を設定ファイルに記載する。

mod_sslの設定ファイルは、/etc/httpd/conf.d/ssl.confです。

この設定ファイルに以下のディレクティブを追加します。

#   pass phrase.  Note that restarting httpd will prompt again.  Keep
#   in mind that if you have both an RSA and a DSA certificate you
#   can configure both in parallel (to also allow the use of DSA
#   ciphers, etc.)
#   Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
#   require an ECC certificate which can also be configured in
#   parallel.
SSLCertificateFile /etc/httpd/conf/crt/server.crt 

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
#   ECC keys, when in use, can also be configured in parallel
SSLCertificateKeyFile /etc/httpd/conf/keys/server.key

/etc/httpd/conf.d/ssl.confの主なディレクティブ

ディレクティブ値の説明
SSLEngineSSL/TLSプロトコルの有効化・無効化を指定。
on,offのいずれかを選択。
SSLProtocol接続可能なSSL/TLSプロトコルのバージョンを指定。
SSLCipherSuite使用可能な暗号スイートを指定
SSLCertificateFileサーバー証明書のファイルを指定
SSLCertificateKeyFileSSLサーバー証明書とペアとなるサーバ秘密鍵のファイルを指定。
SSLCertificateChainFile中間CA証明書のファイルを指定

補足1 SSLProtocolの設定

特定のプロトコルを利用可能とする場合は以下のように記載。

SSLProtocol +TLSv1.1 +TLSv1.2

特定のプロトコルを利用不可とする場合は以下のように記載。

SSLProtocol -SSLv2 -SSLv3
Kanon

「all」を指定するとすべてのバージョンを指定できます。

が、「all」の内容はApacheやOpenSSLのバージョンによって異なります。

暗号スイートの設定

Webサーバーで利用可能な暗号スイートを利用する。

SSLCipherSuite HIGH:!aNULL:!MD5
Kanon

「!」を指定することで、指定した暗号リストを覗く。

利用可能な暗号スイートを確認するにはopenssl ciphersコマンドを実行する。

[root@infrastudy ~]# openssl ciphers -v

以下のような結果となる。

TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD
TLS_AES_128_CCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESCCM(128) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
意味
1列目暗号スイート名
2列目 SSL/TLSプロトコルバージョン
3列目 鍵交換に利用されるアルゴリズム
4列目 証明書の署名に利用されるアルゴリズム
5列目 暗号化通信に利用される共通鍵暗号アルゴリズム
6列目 証明書の署名に利用されるハッシュ関数
openssl ciphersの実行結果の意味

ここまでを設定後、ブラウザからWebサーバーへ接続すると…?

https通信は始まりましたが、自己署名証明書のためブラウザが警告を表示しています。

100%正しく検証するためにはドメインが必要なのですが、私はいまテスト用にドメインを持ち合わせていないので、ここまでの確認となっています。

一応、証明書情報について確認します。

自分で署名しているのであたりまえですね。

今回は以上です。お疲れ様でした。

直近の推し5選!

1

みなさんこんばんは。 こんにちは、Kanon です。今回は… しめさば先生の『君は僕の後悔』の感想記事です。 しめさば先生はこれまでにも『ひげを剃る。そして女子高生を拾う』や『きみは本当に僕の天使なの ...

2

リンク あらすじ 人生オール80点。 そんな俺が託されたのは、元トップアイドル・香澄ミルの世話だった。 ファン対応がしみつきなかなかクラスに馴染めないミル。 そんな彼女に頼られるうち、俺たちは図らずも ...

3

リンク 二丸先生の他の作品はこちら あらすじ 記憶喪失の湖西廻の前に現れたのは、清純で素朴な美少女、丹沢白雪。 「──私、廻くんと恋人だったの」  白雪はそう言って顔を赤らめ、廻の頬にキスをする。   ...

4

リンク あらすじ その夜、僕の青春は〈炎〉とともに産声をあげた――  スマホを忘れて夜の学校に忍び込んだ在原有葉(ありはらあるは)は、屋上を照らす奇妙な光に気づく。そこで出会ったのは、闇夜の中で燃え上 ...

5

こんにちは、Kanon です。今回は… しめさば先生の『きみは本当に僕の天使なのか』の感想記事です。 表紙とタイトルを見るに幻想的な恋の話のように思えるのですが、実はタイトルはそんな幻のようなものでは ...

-Linux, LPIC303対策, Webサーバー, インフラ
-, , , , , , , , , , , ,