Apache httpdでSSLを有効にする

Apache 2.4.6でSSLを有効にしたいと思います。VPN内部からの接続なので、それほど重要ではないですが。

まずはCentOS 7のyumからインストールしたApache httpdにはmod_sslが入っていないので、これをyumから入れます。

[root@sakura ~]# yum install mod_ssl
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: mirror.dmmlabs.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ mod_ssl.x86_64 1:2.4.6-67.el7.centos.6 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

==========================================================================================================================================================================================================================================================
 Package                                                  アーキテクチャー                                        バージョン                                                               リポジトリー                                              容量
==========================================================================================================================================================================================================================================================
インストール中:
 mod_ssl                                                  x86_64                                                  1:2.4.6-67.el7.centos.6                                                  updates                                                  109 k

トランザクションの要約
==========================================================================================================================================================================================================================================================
インストール  1 パッケージ

総ダウンロード容量: 109 k
インストール容量: 224 k
Is this ok [y/d/N]: y
Downloading packages:
mod_ssl-2.4.6-67.el7.centos.6.x86_64.rpm                                                                                                                                                                                           | 109 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : 1:mod_ssl-2.4.6-67.el7.centos.6.x86_64                                                                                                                                                                                    1/1
  検証中                  : 1:mod_ssl-2.4.6-67.el7.centos.6.x86_64                                                                                                                                                                                    1/1

インストール:
  mod_ssl.x86_64 1:2.4.6-67.el7.centos.6

完了しました!
[root@sakura ~]#[root@sakura ~]#
[root@sakura ~]# cd /etc/httpd/modules/
[root@sakura modules]#
[root@sakura modules]# ls -la mod_ssl.so
合計 2696
drwxr-xr-x 2 root root   4096  4月  3 02:24 .
drwxr-xr-x 4 root root     32  3月 31 20:17 ..
-rwxr-xr-x 1 root root 219472 10月 20 05:40 mod_ssl.so
[root@sakura modules]#

続いて設定ファイルと、秘密鍵、サーバー証明書などを用意します。

[root@sakura conf]# mkdir ssl
[root@sakura conf]# cd ssl/
[root@sakura ssl]#
[root@sakura ssl]# openssl genrsa -aes256 2048 > server.key
Generating RSA private key, 2048 bit long modulus
.........................+++
.............................................................................................................................................+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
[root@sakura ssl]#
[root@sakura ssl]# ls -la
合計 4
drwxr-xr-x 2 root root   23  4月  3 02:44 .
drwxr-xr-x 3 root root   45  4月  3 02:43 ..
-rw-r--r-- 1 root root 1766  4月  3 02:44 server.key
[root@sakura ssl]#

httpdのconfディレクトリの下にsslディレクトリを作りました(任意)。

opensslコマンドで秘密鍵を生成します。ここでは一応パスフェーズを設定しています。パスフェーズを設定しない場合は、-aes256のオプションを外すか、設定後は下記のコマンドで解除します。

[root@sakura ssl]# openssl rsa -in server.key -out server_nopass.key
Enter pass phrase for server.key:
writing RSA key
[root@sakura ssl]#

次にサーバーの証明書署名要求(CSR)ファイルを作成します。正式なSSL証明書を発行してもらう場合は、証明書を設置するサーバーで作成します。内容は正しい申請者であることを認証機関に示し、認証期間ではこれに署名をしてサーバー証明書を発行します。ただし今回はオレオレ証明書なので、ほとんど適当です。

[root@sakura ssl]# openssl req -new -key server_nopass.key > server.csr
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) []: <<< 適当(都道府県名など) >>>
Locality Name (eg, city) [Default City]: <<< 適当(市区町村名など) >>>
Organization Name (eg, company) [Default Company Ltd]: <<< 適当(会社名など) >>>
Organizational Unit Name (eg, section) []: <<< 適当(組織名など) >>>
Common Name (eg, your name or your server's hostname) []:  <<< 超重要!(サーバーのホスト名やIPアドレス) >>>
Email Address []:  <<< 適当(どうせ誰も連絡してこないし) >>>

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <<< 適当(基本はブランクで大丈夫) >>>
An optional company name []: <<< 適当 >>>
[root@sakura ssl]#

基本的にCommon Name以外は適当で大丈夫です(オレオレ証明書の場合)。Common Nameだけはアクセスする際のホスト名に合わせておいてください。例えば、https://10.8.0.1/のようなIPアドレスでアクセスする場合、Common NameもIPアドレスで指定します。

証明書署名要求をもとに、サーバー証明書(SSL証明書)を作成します。

[root@sakura ssl]# openssl x509 -in server.csr -days 36500 -req -signkey server_nopass.key > server.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=********/O=******** Ltd/OU=digital/CN=10.8.0.1/emailAddress=************@gmail.com
Getting Private key
[root@sakura ssl]#

秘密鍵はパスフェーズ解除済みのものを使ったので、そのままサーバー証明書のファイルが作成されましたが、そうでない場合は秘密鍵のパスフェーズの入力が必要です。

続いてhttpdの設定を行います。httpdの設定ファイルのあるconf.dにssl.confというファイルがあると思うので、これを編集します。編集するのは基本的に2か所です。SSLCertificateFileの行(100行目あたり)とSSLCertificateKeyFileの行(107行目)のあたりです。前者がサーバー証明書のファイルを指定し、後者がサーバーの秘密鍵を指定しています。diffをとるとこんな感じ。


[root@sakura conf.d]# diff ssl.conf.orig ssl.conf
100c100
< SSLCertificateFile /etc/pki/tls/certs/localhost.crt
---
> SSLCertificateFile /etc/httpd/conf/ssl/server.crt
107c107
< SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
---
> SSLCertificateKeyFile /etc/httpd/conf/ssl/server_nopass.key
[root@sakura conf.d]#

firewall-cmdでポート443の穴が開いていることを確認したら、ブラウザで接続してみます。

[root@sakura ~]# firewall-cmd --permanent --zone=vpn --list-all
vpn (active)
  target: default
  icmp-block-inversion: no
  interfaces: tun0
  sources:
  services: http https db2 ssh postgresql mysql oracle
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[root@sakura ~]#

httpsサービスが有効になっていれば、アクセス可能です。

これでhttpdのサービスを再起動すれば、httpsでアクセス可能になります。

QS_20180415-043643

ただ・・、オレオレ証明書なので、こんな感じで警告が表示されます。詳細→アクセス可能ですが「推奨できません」と言われます。

QS_20180415-044159

そのままアクセスしても、URLに「証明書エラー」と赤文字で表示されてしまいます。解除方法は次のエントリにて。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください