説明
ローカル環境で、SSL通信できるレシピを以下記載していきます。本件で使用する証明書はオレオレ証明書なので、本番環境で使用するのはやめておいた方がいいです。
ちょっとお試しにスマホのブラウザで、加速度センサーを使いたいときなど、SSL通信環境でしかできない環境の場合、本件の内容が活かされると思います。
開発環境
■. 開発環境
・windows10 home
・VirtualBox
・Vagrant
・Docker version 19.03.14, build 5eb3275d40
・docker-compose version 1.27.4, build 40524192
■. 開発コンテナ
・Apache/2.4.38 (Debian)
・PHP 8.0.9 (cli)
必要なファイル・フォルダの準備
①. フォルダ・ファイル構成について
下の画像の構成のように、srcフォルダ(phpinfo.php), Dockerfile, docker-compose.yml, openssl.expを設置していきます。

②. Dockerfileの作成
FROM php:8.0-apache RUN apt-get update \ && apt-get install -y libpq-dev RUN apt-get install -y less vim git expect RUN cp /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini RUN sed -i -e 's/memory\_limit \= 128M/memory\_limit \= 1024M/' \ -i -e 's/\;date\.timezone \=/date\.timezone \= \"Asia\/Tokyo\"/' \ -i -e "s/\;extension\_dir \= \'ext\'/extension\_dir \= \'ext\'/" \ /usr/local/etc/php/php.ini RUN sed -i -e 's/\;zend_extension\=opcache/zend_extension\=opcache/' \ -i -e 's/\;opcache.enable\=1/opcache.enable\=1/' \ -i -e 's/\;opcache.enable_cli\=0/opcache.enable_cli\=1/' \ -i -e 's/\;opcache.optimization_level\=0x7FFFBFFF/opcache.optimization_level\=0x7FFFBFFF/' \ -i -e 's/\;opcache.lockfile_path\=\/tmp/\;opcache.lockfile_path\=\/tmp\n\nopcache\.jit\_buffer\_size \= 128M/' \ /usr/local/etc/php/php.ini RUN mkdir ssl COPY openssl.exp ssl/ WORKDIR /var/www/html/ssl RUN openssl genrsa 2048 > server.key RUN expect openssl.exp RUN ls -la RUN openssl x509 -days 36500 -req -signkey server.key < server.csr > server.crt WORKDIR /var/www/html RUN cp ssl/server.crt /etc/ssl/certs/ RUN cp ssl/server.key /etc/ssl/private/ RUN sed -i -e 's/\/etc\/ssl\/certs\/ssl\-cert\-snakeoil\.pem/\/etc\/ssl\/certs\/server\.crt/' \ -i -e 's/\/etc\/ssl\/private\/ssl\-cert\-snakeoil\.key/\/etc\/ssl\/private\/server\.key/' \ /etc/apache2/sites-available/default-ssl.conf RUN a2enmod ssl \ && a2ensite default-ssl.conf RUN curl -s http://getcomposer.org/installer | php && \ mv composer.phar /usr/local/bin/composer
③. docker-compose.ymlの作成
version: '3' services: app: build: ./ environment: - TZ=Asia/Tokyo ports: - '80:80' - '443:443' volumes: - ./src:/var/www/html
④. openssl.expの作成
こちらで、証明書を作っていきます。(expectファイルで対話型のコマンドに対応していきます。)
#!/usr/bin/expect set ans1 81 set ans2 tokyo set ans3 none set ans4 "Local" set ans5 "hogehoge123@gmail.com" set ans6 password set ans7 none spawn openssl req -new -key server.key -out server.csr expect { -regexp ".*Country Name.*" { send "${ans1}\n" exp_continue } -regexp ".*State or Province Name.*" { send "${ans2}\n" exp_continue } -regexp ".*Locality Name.*" { send "${ans2}\n" exp_continue } -regexp ".*Organization Name.*" { send "${ans3}\n" exp_continue } -regexp ".*Organizational Unit Name.*" { send "${ans3}\n" exp_continue } -regexp ".*Common Name.*" { send "${ans4}\n" exp_continue } -regexp ".*Email Address.*" { send "${ans5}\n" exp_continue } -regexp ".*A challenge password.*" { send "${ans6}\n" exp_continue } -regexp ".*An optional company name.*" { send "${ans7}\n" exp_continue } } exit 0
⑤. srcフォルダの作成、index.phpを作成し、srcフォルダに入れる
5-1. 空っぽのsrcフォルダを作成します。
5-2. phpinfo.phpの作成し、srcフォルダに入れる
<?php phpinfo(); ?>
実行
今回作成した、ファイルのある階層まで移動し、以下のコマンドでを実行してください。
$ docker-compose up -d
確認
①. https://192.168.99.100/phpinfo.phpにアクセス。(※IPは人によって違うことがあるので、ご注意ください)
②. chromeの場合画面左下の「詳細情報を表示」をクリック
③. 192.168.99.100(安全ではありません)にアクセスするをクリック
④. phpinfoの情報が見れるサイトが表示されます。
安全ではありませんというのはあくまで、オレオレ証明書で作ったので、証明書にCAルート機関が登録されてないからです。なので、自分のローカル環境用としてやってみてください。

※証明書の確認は、画面左上の「保護されていない通信」をクリックし、「証明書(無効)」をクリックすれば確認できます。
以上です。
コメント