この記事では、ラズベリーパイを使用して自己署名証明書(オレオレ証明書)を生成し、それをApacheウェブサーバーで使用する手順を紹介します。
前提条件
- ラズベリーパイがインターネットに接続されていること
- 基本的なLinuxコマンドの知識
手順
1. OpenSSLのインストール
まず、OpenSSLをインストールします。ラズベリーパイのターミナルを開いて以下のコマンドを実行してください。
sudo apt-get update
sudo apt-get install openssl
2. 自己署名証明書の生成
次に、OpenSSLを使って自己署名証明書を生成します。以下の手順を実行してください。
# プライベートキーを生成
openssl genpkey -algorithm RSA -out my-private.key
# 証明書署名要求 (CSR) を生成
openssl req -new -key my-private.key -out my-csr.csr
コマンドを実行すると、以下のように入力を求められます。適切な情報を入力してください。
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Shibuya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
Organizational Unit Name (eg, section) []:IT Department
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:............@gmail.com
追加の属性として以下の情報も入力します:
A challenge password []:password
An optional company name []:
CSRが生成されたら、次のコマンドで自己署名証明書を生成します。
openssl x509 -req -days 365 -in my-csr.csr -signkey my-private.key -out my-cert.crt
3. Apacheのインストールと設定
次に、Apacheウェブサーバーをインストールし、設定します。
sudo apt-get install apache2
sudo a2enmod ssl
sudo systemctl restart apache2
証明書ファイルとキーを適切なディレクトリに配置します。
sudo mkdir /etc/apache2/ssl
sudo cp my-cert.crt /etc/apache2/ssl/
sudo cp my-private.key /etc/apache2/ssl/
仮想ホスト設定ファイルを編集します。
sudo nano /etc/apache2/sites-available/default-ssl.conf
以下の内容を追加または編集します。
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ServerName localhost
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/my-cert.crt
SSLCertificateKeyFile /etc/apache2/ssl/my-private.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
4. 仮想ホストの有効化とApacheの再起動
仮想ホストを有効にし、Apacheを再起動します。
sudo a2ensite default-ssl
sudo systemctl reload apache2
5. ウェブサーバーへのアクセス
ブラウザから https://localhost
または https://192.168.0.???
にアクセスすることで、自己署名証明書を使用したHTTPS接続を確認できます。初回アクセス時には、自己署名証明書であるため、ブラウザから「信頼されていない証明書」という警告が表示されますが、これは正常です。
問題解決
「この接続は安全ではない」という警告について
自己署名証明書を使用する場合、この警告が表示されるのは正常です。これは、証明書が信頼された認証局(CA)によって署名されていないためです。自己署名証明書は主に開発環境やテスト環境で使用されるもので、本番環境では信頼された認証局から取得した証明書を使用することをお勧めします。
応答がない場合の対処
https://localhost
で応答がないが https://192.168.0.???
で応答がある場合、以下の手順を試してください。
-
/etc/hosts
ファイルの編集localhost
を正しいIPアドレスにマッピングします。sudo nano /etc/hosts
ファイルに以下の行があることを確認してください(なければ追加してください):
127.0.0.1 localhost 192.168.0.??? localhost
-
Apache設定の確認
default-ssl.conf
ファイルでServerName
をlocalhost
に設定している場合、192.168.0.???
に変更してみてください。sudo nano /etc/apache2/sites-available/default-ssl.conf
以下のように変更します:
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ServerName 192.168.0.??? SSLEngine on SSLCertificateFile /etc/apache2/ssl/my-cert.crt SSLCertificateKeyFile /etc/apache2/ssl/my-private.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
変更を保存したら、Apacheを再起動します。
sudo systemctl reload apache2
-
ブラウザのキャッシュクリア
変更後にブラウザのキャッシュをクリアして、再度アクセスしてみてください。
まとめ
ラズベリーパイで自己署名証明書を生成し、Apacheウェブサーバーで使用する手順を紹介しました。自己署名証明書は手軽に作成でき、開発やテストの際に役立ちますが、本番環境での使用には注意が必要です。信頼性の高い認証局から証明書を取得することを検討してください。
次回はLet's Encryptを用いる方法について解説したいと思います。