Dockerの開発環境を自己証明書でSSL対応する
前提
ディレクトリ構成
. ├── docker/ │ ├── Dockerfile │ ├── apache2/ │ │ └── sites-available/ │ └── ssl/ └── docker-compose.yml
証明書の作成
$ mkdir docker/ssl $ cd docker/ssl
1. 秘密鍵の作成
$ openssl genrsa -out server.key 2048
2. CSRファイルの作成
Common Name
にlocalhost
を指定、それ以外はEnterでOK
$ openssl req -new -sha256 -key server.key -out server.csr 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) []: State or Province Name (full name) []: Locality Name (eg, city) []: Organization Name (eg, company) []: Organizational Unit Name (eg, section) []: Common Name (eg, fully qualified host name) []:localhost Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:
3. 証明書の作成1
$ echo "subjectAltName = DNS:localhost" > server.txt
$ openssl x509 -req -sha256 -days 3650 -signkey server.key -in server.csr -out server.crt -extfile server.txt
証明書作成後はserver.txtは削除してOK
4. default-ssl.confファイルのコピーとマウント
dockerのコンテナに入ってdefault-ssl.confをコピーする
$ docker exec -it container-name bash
$ cp /etc/apache2/sites-available/default-ssl.conf docker/apache2/sites-available/
5. default-ssl.confの修正
- SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem - SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key + SSLCertificateFile /etc/ssl/certs/server.crt + SSLCertificateKeyFile /etc/ssl/private/server.key
6. docker-comose.ymlの修正
# 省略 web: # 省略 volumes: # 省略 - ./docker/apache2/sites-available/default-ssl.conf:/etc/apache2/sites-available/default-ssl.conf # 追加 - ./docker/ssl/server.crt:/etc/ssl/certs/server.crt # 追加 - ./docker/ssl/server.key:/etc/ssl/private/server.key # 追加 ports: - {http通信で使いたいport番号}:80 - {https通信で使いたいport番号}:443 # 追加 # 省略
7. Dockerfileでsslを有効にする
# 省略 RUN a2enmod ssl && a2ensite default-ssl # 省略
buildし直してhttpsで接続できればOK
$ docker-compose build --no-cache && docker-compose up -d
参考
株式会社エイルシステムではWebエンジニア・モバイルアプリエンジニアを募集しています。
実務経験がなくてもOKです。ご興味のある方は弊社HPよりご連絡ください。
- 10年で作成しています。↩