自前サーバーでWordPressのサイトを自前証明書を使ってSSL化した記録
動機
- 『SSLを始めよう』でドメインも証明書も買ったけど、実質1か月ぐらいしか使わなかった
- nginxのサイトも空っぽだし、、、なんかもったいない
WordPress入れたらそれっぽくなるのでは - WordPressをSSL化する方法を調べたら以下の方法ばかりだった
- Really Simple SSLプラグイン使う
- レンタルサーバー側の設定をする
- 設定画面でhttpsにするだけ(?)
→ 自前サーバー(※1)で自前の証明書(※2)を使ってSSL化する方法がまとまっているのがなかった
※1:今回使用するのは、OracleCloudInfrastructure(OCI)のコンピュートインスタンス。ここでいう自前サーバーはレンタルサーバーではないという意。
※2:プラグインやらなんやらではなく、別で用意した証明書の意。
事前準備(準備してあったもの)
せっかくだから気軽に作っては壊ししたかったため、Dockerインストール済み
ドメイン | (『SSLをはじめよう』を参考) |
OCIのコンピュートインスタンス | イメージ : Oracle-Linux-7.9-2022.01.24-0 シェイプ : VM.Standard.E2.1.Micro (『SSLをはじめよう』を参考) |
サーバー証明書 | FujiSSLで発行 有効期限1年 (『SSLをはじめよう』を参考) 上記インスタンスの任意のフォルダ(ここではsslフォルダ)に格納しておく |
Docker | CentOs7 最新版のdockerをインストールするを参考にインストール |
Docker Compose(V2) | Docker公式を参考にインストール |
本題
WordPressコンテナの立ち上げ
クィックスタート: Compose と WordPressを参考にして2.まで実施する
3.のdocker-compose.ymlは、ポートが”8000:80″になっているので、HTTP通信とHTTPS通信用ポートを開けるように変更する
- - "8000:80"
+ - "80:80" # HTTPリダイレクト用(リダイレクトさせないなら不要)
+ - "443:443" # HTTPS通信用
docker-compose.ymlは次のようになる
version: '3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
- "443:443"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
コンテナを起動する(※3)
※3:上記リンクでは”docker-compose up -d”となっているが、docker Compose V2をインストールしたので”docker compose up -d”としている
sudo docker compose up -d
証明書のコピー
コンテナ内で作業するため、コンテナIDを記録しておく
docker ps
/etc/apache2/conf/sslに証明書ファイルを置くことにしたので、フォルダを作成してコピー
コマンド中の<コンテナID>は上記で記録したコンテナID(※4)にする
※4:コンテナIDは一意になれば、そこまで指定すれば以降は省略可能。便利
docker exec -it <コンテナID> mkdir /etc/apache2/conf/
docker cp ssl <コンテナID>:/etc/apache2/conf/
![[opc@docker my_wordpress]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a08a7bb4206 wordpress:latest "docker-entrypoint.s…" 22 seconds ago Up 11 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp my_wordpress-wordpress-1
c6f6258e25c6 mysql:5.7 "docker-entrypoint.s…" 23 seconds ago Up 19 seconds 3306/tcp, 33060/tcp my_wordpress-db-1
[opc@docker my_wordpress]$ docker exec -it 0a mkdir /etc/apache2/conf/
[opc@docker my_wordpress]$ docker cp ssl 0a:/etc/apache2/conf/](https://ssl.noginote.net/wp-content/uploads/2022/03/copy_certificate-1-1024x78.png)
SSL有効化と設定ファイルの編集
初期状態だとエディタ(※5)も入ってないので、入れておく
※5:使用するエディタはお好みで。今回はvimを入れた
docker exec -it <コンテナID> bash
apt update
apt install vim
設定ファイルを作成し、編集する
a2ensite default-ssl
vim /etc/apache2/sites-enabled/default-ssl.conf
ServerNameを追記し、SSLCertificateFileとSSLCertificateKeyFileにコピーした証明書を設定する
ServerAdmin webmaster@localhost
+ ServerName example.net
DocumentRoot /var/www/html
- SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
- SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
+ SSLCertificateFile /etc/apache2/conf/ssl/startssl.crt
+ SSLCertificateKeyFile /etc/apache2/conf/ssl/startssl.key
SSLを有効化する
a2enmod ssl

設定ファイルの確認と再起動
設定にエラーがないか確認する
apache2ctl configtest

画像のようにSyntax OKが表示されれば設定完了。a2enmodしたときに、apacheの再起動が必要と言われているので(service apache2 restart)、再起動する。
service apache2 restart
再起動できたら取得したドメインを指定してアクセス。WordPress画面が出てきて鍵マークが出てれば完了

使用したコマンド一覧
sudo docker compose up -d
docker ps
docker exec -it <コンテナID> mkdir /etc/apache2/conf/
docker cp ssl <コンテナID>:/etc/apache2/conf/
docker exec -it <コンテナID> bash
apt update
apt install vim
a2ensite default-ssl
vim /etc/apache2/sites-enabled/default-ssl.conf
a2enmod ssl
apache2ctl configtest
service apache2 restart
コメント