Apacheをプライベート認証局やオレオレ証明書でHTTPS化

Apache

はじめに

Apacheで構築したWebサーバーのHTTPS化について紹介します。

サーバー証明書には、プライベート認証局で署名した証明書、または自己署名した証明書を使っています。

サーバー証明書の作成

HTTPS化に必要なサーバー証明書は、次のいずれかの方法で作成します。

  • プライベート認証局による証明書の作成 (オレオレ認証局)
  • 自己署名による証明書の作成 (オレオレ証明書)

プライベート認証局による証明書の作成

次の記事に従ってプライベート認証局の構築、サーバー証明書の作成、認証局の証明書のインポートまでを行なってください。

プライベート認証局によるWebサーバーのHTTPS化
プライベート認証局を構築して、Webサーバー向けのサーバー証明書を発行する手順について紹介します。認証局の証明書をWebブラウザやOSの証明書ストアに読み込むことで、自己署名証明書を使ったサーバーに、警告なしにアクセスすることができます。

scp を使って認証局からWebサーバーの秘密鍵と署名済み証明書を受け取ります。<user>, <ca-server>は適宜置き換えてください。

scp <user>@<ca-server>:~/web-server/web-server.crt ~/web-server.crt
scp <user>@<ca-server>:~/web-server/web-server.key ~/web-server.key

自己署名による証明書の作成 (オレオレ証明書)

秘密鍵 (web-server.key) と署名リクエスト (web-server.csr) を作成します。秘密鍵は暗号化せずに作成しています。暗号化していると、Apacheを起動するサービス中でPass Phraseの入力を求められ、エラーとなるためです。

cd ~
openssl genpkey -out web-server.key -algorithm RSA -pkeyopt rsa_keygen_bits:2048
openssl req -new -key web-server.key -out web-server.csr

作成中、次のような質問が表示されるので、適宜指定してください。

Country Name (2 letter code) [AU]: JP
State or Province Name (full name) [Some-State]: Tokyo
Locality Name (e.g. city) []: Chiyoda
Organization Name (eg. company) [Internet Widgits Pty Ltd]: Hoge LLC
Organiztion Unit Name (eg. section) []: Home
Common Name (e.g. server FQDN or YOUR name) []: example.com

必須項目は、Country Name, Organization Name, Common Nameです。

Common Name (CN) は、Webブラウザに入力されたアドレスと比較されます。WebサーバーがFQDN (Fully Qualified Domain Name) を持っている場合は、それを指定します。IPアドレスしか持たない場合は、IPアドレスを指定します。

ブラウザによっては、CNではなく、SAN (Subject Alt Name) を参照するため、本来はSANの指定も必要です。ただそもそも自己署名証明書として例外を承認することで、SANは無視されるので、ここではSANの指定は省略しています。

証明書 (web-server.crt) を生成します。

openssl x509 -in web-server.csr -out web-server.crt -req -signkey web-server.key -days 365

正しく実行されると、Signature ok と表示されます。

Apacheのインストール

Apacheをインストールします。

参考資料: Install and Configure Apache

sudo apt update
sudo apt install apache2

ブラウザで、http://<サーバーアドレス> にアクセスすると、デフォルトのページが表示されます。

ApacheのHTTPS構成の設定

証明書と秘密鍵の保管

証明書と秘密鍵をディレクトリ (/etc/certificate) を作ってコピーします。

sudo mkdir /etc/certificate
sudo cp ~/web-server.crt /etc/certificate/web-server.crt
sudo cp ~/web-server.key /etc/certificate/web-server.key

Apache SSLパラメータの定義

Apacheの構成ファイルに読み込むSSLパラメータを定義します。

sudo vim /etc/apache2/conf-available/ssl-params.conf

次の内容をコピーします。

    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    
    SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    
    SSLHonorCipherOrder On    
    
    Header always set X-Frame-Options DENY
    
    Header always set X-Content-Type-Options nosniff
    
    # Requires Apache >= 2.4
    
    SSLCompression off
    
    # Requires Apache >= 2.4.11
    
    SSLSessionTickets Off

サイト定義への証明書の組み込み

Apacheのサイト定義を更新して、新しい証明書を組み込みます。

定義ファイルを開きます。

sudo vim /etc/apache2/sites-available/default-ssl.conf

定義ファイル内で次の記述を探します。

                    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
                    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

新しい証明書で置き換えます。

                    SSLCertificateFile      /etc/certificate/web-server.crt
                    SSLCertificateKeyFile /etc/certificate/web-server.key

構成の適用

必要なモジュールを組み込みます。

sudo a2enmod ssl
sudo a2enmod headers

SSLパラメータ定義を組み込みます。

sudo a2enconf ssl-params

HTTPSアクセスを受け付けるサイトの定義を組み込みます。

sudo a2ensite default-ssl

構成をテストします。

sudo apache2ctl configtest

次のように出力されれば正しく構成されています。ServerNameが指定されていない旨の警告がでますが、HTTPS化自体にはServerNameは必須ではありません。

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

ServerNameを指定する場合は、次のファイルに書き込みます。

 sudo vim /etc/apache2/apache2.conf

FQDNまたはIPアドレスを指定します。example.comは適宜置き換えてください。

ServerName example.com

Apacheサーバーを再起動します。

sudo systemctl restart apache2

動作確認

Webブラウザで、https://<web-server> にアクセスします。

プライベート認証局で証明書を作成した場合は、アドレスバーに鍵マークが表示され、そのまま当該のページが表示されます。

自己署名証明書を作成した場合は、ブラウザに警告画面が表示されます。指示に従って警告を受け入れることで、当該のページが表示されます。

更新記録

日付内容
2023/05/14ServerNameについて記述を復活 (ただし必須ではないことも明記)
2023/05/12apache2.confへのServerName設定についての記述を削除 (必須ではないため)
2023/05/03初版リリース

コメント

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