LoginSignup
48
51

More than 3 years have passed since last update.

Apache2.4でHTTPS通信を行うための環境構築手順と詰まりどころ

Last updated at Posted at 2018-07-19

はじめに

Web Speech APIを使ったアプリを作成しようとしたところ、セキュリティの関係でHTTPではマイクの許可がされませんでした。そこでHTTPS通信できる環境を構築しようと考えました。
SSL通信を行うためにSSLサーバ証明書を購入する必要がありますが、今回は自己証明書で代用します。
CentOS7.5にApache2.4をインストールするところから始めます。

詰まったこと

先に自分が詰まった部分を記載しておきます。

  • ファイアウォールの設定をしていなかったこと
  • SElinuxによるエラー

HTTPサーバの構築

まずはHTTPサーバの環境を構築します。

Apache2.4をインストール

yumを使ってインストールします。
CentOS6系は標準ではApache2.2までしかないので注意してください。

/* バージョン確認 */
# yum info httpd
...
バージョン          : 2.4.6
...

/* Apache2.4インストール */
# yum -y install httpd

# httpd -version
Server version: Apache/2.4.6 (CentOS)

/* 自動起動設定 */
# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

/* Apache起動 */
# systemctl start httpd.service

ファイアウォールの設定

Apacheを起動したのにサイトが表示されないなと思っていたら、ファイアウォールで使用するポートの許可をしていませんでした。ついでにこの段階で443番ポートへの通信も許可しておきます。

/* firewalldにHTTP(80番ポート)への通信を許可する */
# firewall-cmd --add-service=http --zone=public --permanent
success

# firewall-cmd --reload
success

/* firewalldにHTTPS(443番ポート)への通信を許可する */
# firewall-cmd --add-service=https --zone=public --permanent
success

# firewall-cmd --reload
success

参考:WEB ARCH LABO

HTTPSサーバの構築

構築手順は以下のQiitaの記事を参考にしています。詳細な内容はこちらを参照ください。
参考:Apache httpdで作るHTTPSサーバ

sslのモジュールをインストール

# yum -y install mod_ssl

秘密鍵を作成

# openssl genrsa > server.key

CSR(証明書署名要求)を作成

CSRは公開鍵の情報と組織の情報を含みます。

# openssl req -new -key server.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) []:XXX.XXX.XXX.XXX // ipアドレス
Email Address []:  // 空白

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

サーバ証明書を作成

# openssl x509 -req -signkey server.key < server.csr > server.crt

作成した鍵と証明書を適当な場所に配置

# mkdir /usr/local/ssl
# mkdir /usr/local/ssl/private
# mkdir /usr/local/ssl/cers
# mv server.key /usr/local/ssl/private
# mv server.crt /usr/local/ssl/cers

/* csrファイルの削除 */
# rm server.csr

パーミッションを設定

秘密鍵や証明書は誤って変更しないよう、所有者にのみ読取可能権限を付与します。
他のグループは一切の権限を付与しません。

# chmod 400 /usr/local/ssl/private
# chmod 400 /usr/local/ssl/cers

参考:CSP SSL

ssl.confを修正して鍵と証明書にパスを設定

# vi /etc/httpd/conf.d/ssl.conf
-----
# SSLCertificateFile /etc/pki/tls/certs/localhost.crt  // コメントアウト
SSLCertificateFile /usr/local/ssl/cers/server.crt  // 追加

# SSLCertificateKeyFile /etc/pki/tls/private/localhost.key  // コメントアウト
SSLCertificateKeyFile /usr/local/ssl/private/server.key  // 追加
-----

/* Apache再起動 */
# systemctl restart httpd

作業は以上で終了です。
ブラウザにhttps://[IPアドレス]を入力して、アクセスできるか確認してみてください。
アクセスできますが、自己証明書なのでWarningが表示されます。


**これより下は備忘録の為に残しています。
etc/httpd/conf以下に証明書と鍵を配置した場合に起こった事象です。

Apache再起動時にエラーが発生

ssl.confを修正してパスを設定し、Apacheを再起動したところ、以下のエラーが発生しました。

Syntax error on line 101 of /etc/httpd/conf.d/ssl.conf:
SSLCertificateFile: file '/etc/httpd/conf/server.crt' does not exist or is empty

しかしパスは正しく、server.crtの中身も確かに存在します。
原因を調査したところ、SELinuxのアクセス制御機能が原因のようでした。

解決するためには次の方法があります。

  1. SELinuxの無効化(非推奨)
  2. 適切なSELinuxのポリシーを設定する

1. SELinux無効化(非推奨)

1つめはセキュリティ上よろしくないので非推奨です。
SELinuxをdisabledにします。

# vi /etc/selinux/config
-----
SELINUX=disabled
-----

/* 再起動 */
# reboot

2. 適切なSELinuxのポリシーを設定する

2つ目は適切なSELinuxのポリシーを設定する方法です。
参考:SELinux を使おう.使ってくれ

/*SELinuxのstatusを確認*/
# getenforce
Enforcing

/* タイプの確認 */
# ls -laZ /etc/httpd/conf
新規作成したディレクトリのタイプがunconfined_u...になっている

/* タイプの修正 */
# restorecon -RF /etc/httpd/conf

/* タイプの確認 */
# ls -laZ /etc/httpd/conf
新規作成したディレクトリのタイプがsystem_u...になっている

/* Apache再起動 */
# systemctl restart httpd

こうすることでエラーが解消され、HTTPSにアクセス可能となりました。

参考:
Ssl証明書を設定したらapacheが起動しない?
SELinuxの無効化

48
51
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
51