Help us understand the problem. What is going on with this article?

Apache httpdで作るHTTPSサーバ

More than 1 year has passed since last update.

はじめに

Webサーバとして非常に一般的に使われているApache httpdを利用して、HTTP/HTTPS接続のできるWebサーバを構築する練習をします。
OSはCentOS 7.4、Apacheのバージョンは2.4.6です。

HTTPサーバができるまで

Apacheのインストール

CentOSデフォルトのリポジトリに入っていますので、yumを使ってインストールしていきましょう。

# yum -y install httpd
# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Oct 19 2017 20:39:16

さっそく起動

インストールできたのですぐに起動して試しましょう。

# systemctl start httpd
# systemctl is-active httpd
active

起動しているようです。ブラウザから接続してみましょう。
image.png
うまくいきましたね!

HTTPSサーバができるまで

SSLモジュールのインストール

続いてメインの、HTTPSサーバ構築です。ApacheでHTTPS機能を使うにはmod_sslというモジュールが必要になりますので、まずはこれをインストールしましょう。

# yum -y install mod_ssl
# httpd -M |grep ssl
 ssl_module (shared)

秘密鍵とサーバ証明書の作成

SSLハンドシェイクに使用する秘密鍵を作成します。秘密鍵はopenssl genrsaコマンドで作成できますので、これをリダイレクトしてkeyファイルを作ります。

# openssl genrsa > server.key
Generating RSA private key, 2048 bit long modulus
...........+++
..........................+++
e is 65537 (0x10001)

続いてCSRファイルを作成します。CSRファイルは認証局にサーバ証明書を発行してもらう時に使用するファイルで、openssl req -new -key <privatekeyfile>コマンドで作成できます。こちらもリダイレクトしてファイルに書き出しましょう。このコマンドは対話式なので本来は真面目にFQDN等を入れないといけないのですが、練習なのですべてEnterで飛ばします。

# 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]:
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) []:
Email Address []:

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

できました。さて、最後にサーバ証明書です。本来ならこのCSRファイルを認証局に渡して署名してもらう必要があるのですが、無料でやりたいので自分で署名してしまいます。先ほど作成したCSRを入力として、以下のコマンドを実行します。

# openssl x509 -req -signkey server.key < server.csr > server.crt
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting Private key

無事、証明書(server.crt)ができました。CSRはこの段階で削除してしまって大丈夫です。

# rm server.csr

秘密鍵とサーバ証明書の配置

作成した鍵と証明書を/etc/httpd/以下に配置していきます。どこに配置するかには明確な決まりがないようですが、/etc/httpd/conf/ssl.keyおよび/etc/httpd/conf/ssl.crt配下に置くことにします。
参考:http://www.apache.com/how-to-setup-an-ssl-certificate-on-apache/

# mkdir /etc/httpd/conf/ssl.key
# mkdir /etc/httpd/conf/ssl.crt
# mv server.key /etc/httpd/conf/ssl.key/
# mv server.crt /etc/httpd/conf/ssl.crt/

SSLモジュールの設定

/etc/httpd/conf.d/ssl.confの中に、配置した鍵と証明書のパスを設定します。

# vi /etc/httpd/conf.d/ssl.conf

以下のように修正します

# SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
# SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key

完了したら、いよいよApacheを再起動して接続してみましょう。

# systemctl restart httpd
# systemctl is-active httpd
active

image.png

できました!

感想

初めてApacheでHTTPSサーバの設定を行いました。思ったより大変でした。opensslコマンド周辺の理解がまだ浅いので、機会があれば掘り下げてみたいと思います。

jinnai73
ネットワーク運用、構築。 金融系の経験多め。 現職はデータセンター会社。
https://github.com/jinnai73
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした