Apacheをhttpsでアクセスするための設定

仕事でHTTPサーバを運用するならやっぱり暗号化(SSL化)して運用したいよね、ってことで、ここではApacheをhttpsで運用するための設定、すなわちサーバ証明書を作成して設置する手順を解説します。

mod_sslのインストール

Apache(httpd)をインストールした後で、ApacheのSSLモジュール mod_ssl を以下の通り、インストールしましょう。

# dnf -y install mod_ssl

鍵ペアとサーバ証明書の作成

SSL通信に必要となる鍵ペアとサーバ証明書を作成します。本来なら、信頼できる証明書発行機関(CA)から発行されたサーバ証明書を使用したいところですが、購入すると結構な費用がかかりますので、今回は自分自身で証明書を発行します(いわゆる「なんちゃって証明書」とか「オレオレ証明書」とか言われるやつです)。

秘密鍵の作成

最初に秘密鍵(server.key)を以下の通り作成します。最後に2回、パスワードの入力が求められるので、設定したいパスワードを入力して下さい。

# 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: (もう一度パスワードを設定する)

公開鍵の作成

次に公開鍵(server.csr)を以下の通り作成します。入力事項はそれぞれ自分の情報として下さい。
Common Nameには、httpサーバにアクセスする際のサーバのURLを指定します。この例ではサーバのURLをFQDNでアクセスしたいのでood0.home.local を指定していますが、IPアドレスでアクセスしたいのであればIPアドレスを指定します。尚、ここで指定する文字列(FQDNまたはIPアドレス)は、Apacheの設定ファイル /etc/httpd/conf/httpd.conf のServerName行に定義したものと同じにしておく必要があります。
最後に、秘密鍵を作成したときに設定したパスワードを求められるので入力します。

# 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) []:Chiba
Locality Name (eg, city) [Default City]:Chiba-city
Organization Name (eg, company) [Default Company Ltd]:RunningDog Inc.
Organizational Unit Name (eg, section) []:Development Section
Common Name (eg, your name or your server's hostname) []:ood0.home.local
Email Address []:xxx@xxx.xxxxxxx.jp

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: (秘密鍵を作成したときに設定したパスワードを入力する)
An optional company name []:

サーバ証明書(デジタル証明書)の作成

次にサーバ証明書(server.crt)を以下の通り作成します(サーバ証明書はデジタル証明書やSSL証明書と呼ばれることもあります)。ここでも最後に、秘密鍵を作成したときに設定したパスワードを求められるので入力します。
ちなみに、-days に指定する数字はサーバ証明書の有効期間となる日数です。途中で期限切れになるとアクセスエラーとなって困るのでデカい数字を指定しています(笑)。

# openssl x509 -in server.csr -days 365000 -req -signkey server.key > server.crt
Signature ok
subject=C = JP, ST = Chiba, L = Chiba-city, O = RunningDog Inc., OU = Development Section, CN = 192.168.1.204, emailAddress = xxx@xxx.xxxxxxx.jp
Getting Private key
Enter pass phrase for server.key:
(秘密鍵を作成したときに設定したパスワードを入力する)

鍵ペアとサーバ証明書の設置

上記で作成した秘密鍵, 公開鍵, サーバ証明書 を /etc/pki/tls/certs/ に格納します。

# cp -p /root/sbin/server.csr /etc/pki/tls/certs/
# cp -p /root/sbin/server.crt /etc/pki/tls/certs/
# cp -p /root/sbin/server.key /etc/pki/tls/privates/

なぜこのディレクトリにしたかというと、/etc/httpd/conf.d/ssl.conf を見たときに、証明書を格納するディレクトリが /etc/pki/tls/certs/ だったからです。

上記の通り格納した秘密鍵とサーバ証明書のパスを /etc/httpd/conf.d/ssl.conf の以下の行に定義します。
こちらがサーバ証明書の定義。

SSLCertificateFile /etc/pki/tls/certs/server.crt

こちらは秘密鍵の定義です。

SSLCertificateKeyFile /etc/pki/tls/private/server.key

Apacheを再起動する

上記の作業が完了したら、以下の通りApacheを再起動して下さい。

# systemctl restart httpd
Enter TLS private key passphrase for 192.168.1.204:443 (RSA) : (ここで秘密鍵を作成したときに設定したパスワードを入力)

上記の通り、起動時にパスワードの入力が求められるので面倒なんですよね。
パスワードを自動入力する方法もあるみたいなので、興味のある方はインターネットで検索して調べてみて下さい。

httpsでURLにアクセスしてみよう

前述の通り、今回作成したのは「なんちゃって証明書」なので、httpsでアクセスしたときにはブラウザが警告を表示します。以下はchromeの画面です。

httpsの警告画面

「詳細設定」をクリックすると、「ood0.home.local にアクセスする (安全ではありません)」というリンクが表示されます。この警告は無視してリンクをクリックすると、ood0.home.local のURLにアクセスすることができます。

イントラネットでの運用であれば、なんちゃって証明書で十分だと思うよ。。

広告主へのリンク

コメント

タイトルとURLをコピーしました