今回は、Ubuntu 22.04にApache2をインストールして、HTTPS対応のWebサーバを構築するまでを手順にしました。
なお、本手順では自己証明書を使用してHTTPSをサイトを作成しています。
本番環境等で使用する場合には、公的な証明書を使用して作成してください。
期待する目標
本手順で期待する目標は以下の通りです。
- Ubuntu 22.04を使用してApacheをインストールすることができる
- Apacheの設定をすることができる
- SSL自己証明書を作成することができる
- HTTPSのサイトを構築することができる
前提条件
今回作成したWebサーバの仮想マシンは以下の通りとなります。
- CPU : 2vCPU
- MEM : 4GB
- DISK : 60GB
- IP : 192.168.100.177
- Hostname : dev-web
- OS : Ubuntu 22.04 Server
Ubuntu 22.04のインストール手順については、こちらの記事で解説しています。
本手順は検証環境のため最低限の設定のみを行っています。
本番環境でWebサーバを公開する場合には設定を検討してから公開してください。
インストールしたUbuntu 22.04には最新のアップデートとSSH接続が可能な状態にしてあります。
Apache インストール
Ubuntu 22.04にSSH接続し、以下のコマンドを実行します。
$ sudo apt install apache2
Apacheのインストールが終わったら起動確認とインストールされたバージョンを確認してみます。
$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-06-21 17:10:05 UTC; 26s ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 24913 (apache2)
Tasks: 55 (limit: 4538)
Memory: 5.1M
CPU: 20ms
CGroup: /system.slice/apache2.service
tq24913 /usr/sbin/apache2 -k start
tq24915 /usr/sbin/apache2 -k start
mq24916 /usr/sbin/apache2 -k start
$ apacheclt -v
Server version: Apache/2.4.52 (Ubuntu)
Server built: 2022-03-25T00:35:40
systemctlでApachの状態を確認します。
[Active]のステータスが[active (running)]となっていることを確認します。
Apacheのバージョンは、[apachctl -v]で確認することができます。
2022/06/22現在は、Apache 2.4.52が公式リポジトリに登録されているため、該当のバージョンがインストールされました。
これ以外のバージョンを任意でインストールする場合は、手動でインストーラをダウンロードし、インストールを行うか、非公式のレポジトリを登録し、インストールする方法があります。
Webサイトアクセス(HTTP)
Apacheが正常に起動しているので、今時点でWebサーバとしての機能は提供されています。
Ubuntu 22.04からアクセス可能な端末のブラウザより、以下のURLを指定するとApacheのでデフォルトページが表示されます。
URL : http://[WebサーバのIPまたはホスト名]
HTTPでApacheのデフォルトページにアクセスすることができました。
自己証明書の生成
ApacheをHTTPSで通信するために、SSL証明書を作成する必要があります。
今回は、検証環境のため、公的なSSL証明書ではなく自己証明書を作成してHTTPSの通信を行いたいと思います。
Ubuntu 22.04より、以下のコマンドを実行して秘密鍵を作成します。
[/etc/ssl/private/]へファイルを作成する必要があるため、一時的に以下のコマンドを実行してroot権限で操作しています。
$ sudo su
→root権限へスイッチ
#cd /etc/ssl/private
→この移動がroot権限が無いと移動できない。
# openssl genrsa -aes128 -out dev-web_20220621.key 2048
Enter PEM pass phrase: 秘密鍵のパスフレーズを設定
Verifying - Enter PEM pass phrase: 設定した秘密鍵のパスフレーズを再度入力
# ll
total 16
drwx--x--- 2 root ssl-cert 4096 Jun 21 17:22 ./
drwxr-xr-x 4 root root 4096 Jun 21 17:08 ../
-rw------- 1 root root 1874 Jun 21 17:26 dev-web_20220621.key
-rw-r----- 1 root ssl-cert 1704 Jun 21 17:10 ssl-cert-snakeoil.key
秘密鍵の作成が完了したら、秘密鍵に設定したパスフレーズを削除していきます。
パスフレーズなしで作成しようとしましたが、うまく作成できませんでした。
# openssl rsa -in dev-web_20220621.key -out dev-web_20220621.key
Enter pass phrase for server.key: 設定した秘密鍵のパスフレーズを入力
writing RSA key
# ll
total 16
drwx--x--- 2 root ssl-cert 4096 Jun 21 17:22 ./
drwxr-xr-x 4 root root 4096 Jun 21 17:08 ../
-rw------- 1 root root 1704 Jun 21 17:26 dev-web_20220621.key
-rw-r----- 1 root ssl-cert 1704 Jun 21 17:10 ssl-cert-snakeoil.key
このパスフレーズを削除する作業ですが、実際には行わなくても問題ないと思います。
ただ、パスフレーズの削除を実施しない場合、Apacheの設定が読み込まれるタイミングでパスフレーズの入力が求められます。
秘密鍵のパスフレーズを削除したら、CRSの作成を行っていきます。
CSRは[Certificate Signing Request]の略で、証明書署名要求などといい、証明書を発行するために必要な情報を作成する作業になります。
# openssl req -new -days 365 -key dev-web_20220621.key -out dev-web_20220621.csr
Ignoring -days without -x509; not generating a certificate
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) [AU]:JP →国の2レターコードを入力(日本であればJP)
State or Province Name (full name) [Some-State]:Sumida-ku →サーバの所在(市区町村名を入力)
Locality Name (eg, city) []:Tokyo →サーバの所在(都道府県名を入力)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:willserver →組織名を入力
Organizational Unit Name (eg, section) []:willserver →部署名を入力
Common Name (e.g. server FQDN or YOUR name) []:dev-web.xxxxx.xxxx →証明書のCN(FQDN)を入力
Email Address []:xxxxx@xxxxxx.xxxx →メールアドレスを入力
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: →空白のままEnter
An optional company name []: →空白のままEnter
# ls
dev-web_20220621.csr →CSRファイルが再生されている
dev-web_20220621.key
ssl-cert-snakeoil.key
CSRの作成が完了したら、そのCSRをもとに自己証明書を作成してきます。
公的なSSL証明書を発行する場合は、このCSRを使用することで発行ができます。
# openssl x509 -in dev-web_20220621.csr -out dev-web_20220621.crt -req -signkey dev-web_20220621.key -days 365
Certificate request self-signature ok
subject=C = JP, ST = Sumida-ku, L = Tokyo, O = willserver, OU = willserver, CN = dev-web.xxxxx.xxxx, emailAddress = xxxxx@xxxxxx.xxxx
# ll
total 24
drwx--x--- 2 root ssl-cert 4096 Jun 21 17:28 ./
drwxr-xr-x 4 root root 4096 Jun 21 17:08 ../
-rw-r--r-- 1 root root 1411 Jun 21 17:28 dev-web_20220621.crt →crtファイルが生成されればOK
-rw-r--r-- 1 root root 1102 Jun 21 17:27 dev-web_20220621.csr
-rw------- 1 root root 1704 Jun 21 17:26 dev-web_20220621.key
-rw-r----- 1 root ssl-cert 1704 Jun 21 17:10 ssl-cert-snakeoil.key
以上で、自己証明書の作成は完了です。
Apachの設定(HTTPS)
自己証明書の作成が完了したらApacheにSSLの設定を行っていきます。
Ubuntu 22.04のApacheの設定ファイルは/etc/apache2/
配下にあります。
SSLの設定は様々な方法がありますが、今回はデフォルトのコンフィグに設定していきます。
# vi /etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See
# /usr/share/doc/apache2/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed.
#SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem →デフォルトのサーバ署名書をコメントアウト
#SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key →デフォルトの秘密鍵をコメントアウト
SSLCertificateFile /etc/ssl/private/dev-web_20220621.crt #作成したSSL証明書のファイルパスを指定。
SSLCertificateKeyFile /etc/ssl/private/dev-web_20220621.key #作成した秘密鍵ファイルのパスを指定。
基本的には、[SSL engine Switch]セクションにある証明書ファイルを作成した秘密鍵ファイルと証明書ファイルのパスに書き換えてあげれば問題ありません。
設定の変更後、Apache側でSSL機能を有効化していきます。
# a2ensite default-ssl
Enabling site default-ssl.
To activate the new configuration, you need to run:
systemctl reload apache2
# a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
systemctl restart apache2
# systemctl restart apache2
# systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-06-21 18:20:00 UTC; 2s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 25372 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 25376 (apache2)
Tasks: 55 (limit: 4538)
Memory: 6.5M
CPU: 24ms
CGroup: /system.slice/apache2.service
tq25376 /usr/sbin/apache2 -k start
tq25377 /usr/sbin/apache2 -k start
mq25378 /usr/sbin/apache2 -k start
a2ensite
コマンドで今回設定したdefault-sslのConfigをサイトに適用するという設定になります。a2enmod
コマンドでApacheのSSL機能を有効化します。
こちらの2つのコマンドが実行できたらApacheを再起動して、ステータスを確認します。
以上でApachのSSL設定は完了です。
Webサイトアクセス(HTTPS)
SSLの設定が完了したらHTTPSでApacheにアクセスしてみます。
URLをhttps://~に設定してアクセスすると、自己証明書を使用しているため、証明書エラーが表示されます。
今回は、自己証明書を使用している関係で発生しているものなので、承知の上進みます。
Apacheのデフォルトページが表示されたらWebサーバのHTTPS化は完了です。
最後に、ブラウザからSSL証明書を確認し、CRSで設定したものが反映されていればOKです。
まとめ
今回は、Ubuntu 22.04にApacheをインストールし、自己証明書を使用したHTTPSサイトを構築する手順を公開しました。
検証環境のため、セキュリティ設定やApacheの設定等は触れずにHTTPSのサイトを構築することのみに焦点を当てて解説しました。
おまけ
本ブログではVMwareやWindows、Linuxのインストール手順等も公開しております。
インフラエンジニアとして有益な記事や無益なコンテンツも作成しておりますので、通勤時間や休憩時間、休日のスキマ時間等に合わせて読んでいただけると幸いです。
また、Youtubeで解説動画も鋭意作成中です。本ブログで記事にしているものも動画にしようと思っておりますので、よろしくお願いいたします。
willserverのnoteも開設したのでフォローお願いします。
コメント