質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

解決済

dockerでLet's Encriptでhttpsアクセスしたいが証明書エラーが発生してしまいます

bws
bws

総合スコア0

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

2回答

0評価

0クリップ

2353閲覧

投稿2019/05/21 04:56

編集2022/01/12 10:58

やりたいこと

ホストOS:WindowsServer2016
ゲストOS:CentOS7(VirtualBox)
クライアントOS:Mojave 10.14.5
ゲストOS内にdocker-composeで下記リンクのようなことをしたいと思っています。

letsencrypt-nginx-proxy-companionを使って複数ドメイン名に無料SSL証明書を適用する

困っている事

httpではアクセスできましたが、httpsですと以下のようなエラーが出てアクセス出来ません。

$ curl https://xxx.com curl: (60) Peer's certificate issuer has been marked as not trusted by the user. More details here: http://curl.haxx.se/docs/sslcerts.html curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alternate file using the --cacert option. If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL). If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option.

ホストOS:CentOS7にdocekr-composeでは成功したdocker-compsoe.yml、Dockerfileの構成で試しているのですが、Windows環境ですとどうしてもhttpsで接続する時に証明書エラーが発生してしまいます。

コード

// proxy側のdocker-compose.yml version: "2" services: proxy: image: jwilder/nginx-proxy container_name: proxy ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - ./certs:/etc/nginx/certs:ro - /etc/nginx/vhost.d - /usr/share/nginx/html restart: always letsencrypt: image: jrcs/letsencrypt-nginx-proxy-companion container_name: letsencrypt volumes: - ./certs:/etc/nginx/certs - /var/run/docker.sock:/var/run/docker.sock:ro volumes_from: - proxy restart: always mysql: image: mariadb container_name: mysql command: > --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --max-allowed-packet=128M ports: - "127.0.0.1:3306:3306" environment: MYSQL_ROOT_USER: root MYSQL_ROOT_PASSWORD: pass MYSQL_DATABASE: mysql volumes: - ./mysql:/var/lib/mysql restart: always networks: default: external: name: shared
// アプリケーション側のdocker-compose.yml version: '2' services: nginx: build: ./nginx external_links: - mysql container_name: "nginx" volumes: - ./src:/src - ./nginx/default.conf:/etc/nginx/conf.d/default.conf - ./logs/:/var/log/nginx/ environment: VIRTUAL_HOST: xxx.com LETSENCRYPT_HOST: xxx.com LETSENCRYPT_EMAIL: xxx@xxx.com restart: always php: build: ./php container_name: "php" volumes: - ./src:/src - ./php/php.ini:/usr/local/etc/php/php.ini - ./php/www.conf:/usr/local/etc/php-fpm.d/zzz-www.conf restart: always networks: default: external: name: shared
// ./nginx/Dockerfile FROM nginx:latest ARG AGENT_UID=1000 ARG AGENT_GID=1000 RUN groupadd -g ${AGENT_GID} username\ && useradd -d /home/docker -u ${AGENT_UID} -g username username\ && sed -ie "s/nginx;/username;/" /etc/nginx/nginx.conf
// .nginx/default.conf server { listen 80; server_name localhost; root /src/; index index.php index.html index.htm; client_max_body_size 20m; location / { try_files $uri $uri/ /index.php?$query_string; } location ~* /wp-config.php { deny all; } location ~ \.php$ { try_files $uri = 404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; } location ~* \.(css|js|jpg|png|gif|ico)$ { expires 30d; } gzip on; gzip_types text/css application/javascript application/json application/font-woff application/font-tff image/gif image/png image/jpeg application/octet-stream; gzip_min_length 1000; gzip_proxied any; gunzip on; }
$ docker network list NETWORK ID NAME DRIVER SCOPE d9e59ffd2d93 bridge bridge local fd9e53c427b4 host host local ff3ac73490ce none null local dd1e87624732 shared bridge local

追記

docker-compose upしたところ以下のようなエラーが出ていました。

letsencrypt | Error: can't get docker-gen container id ! letsencrypt | If you are running a three containers setup, check that you are doing one of the following : proxy exited with code 0 letsencrypt | - Set the NGINX_DOCKER_GEN_CONTAINER env var on the letsencrypt-companion container to the name of the docker-gen container. letsencrypt | - Label the docker-gen container to use with 'com.github.jrcs.letsencrypt_nginx_proxy_companion.docker_gen.' proxy | Custom dhparam.pem file found, generation skipped proxy | forego | starting dockergen.1 on port 5000 proxy | forego | starting nginx.1 on port 5100 proxy | nginx.1 | 2019/06/10 02:54:09 [emerg] 22#22: PEM_read_bio_DHparams("/etc/nginx/dhparam/dhparam.pem") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: DH PARAMETERS) proxy | forego | starting nginx.1 on port 5200 proxy | forego | sending SIGTERM to nginx.1 proxy | forego | sending SIGTERM to dockergen.1

labels: com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true" の記載を外したところ以下のようになりました。

$ docker-compose up Starting proxy ... done Starting mysql ... done Starting letsencrypt ... done Attaching to mysql, proxy, letsencrypt proxy | Custom dhparam.pem file found, generation skipped proxy | forego | starting dockergen.1 on port 5000 proxy | forego | starting nginx.1 on port 5100 proxy | nginx.1 | 2019/06/10 03:14:58 [emerg] 21#21: PEM_read_bio_DHparams("/etc/nginx/dhparam/dhparam.pem") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: DH PARAMETERS) proxy | forego | starting nginx.1 on port 5200 proxy | forego | sending SIGTERM to dockergen.1 proxy | forego | sending SIGTERM to nginx.1

追記2(opensslに変更、--resolveオプションを使用)

curl -vk

$ openssl version OpenSSL 1.0.2s 28 May 2019 $ curl -v https://xxx.com --resolve xxx.com:443:{ip} * Added xxx.com:{ip} to DNS cache * Hostname xxx.com was found in DNS cache * Trying {ip}:443... * TCP_NODELAY set * Connected to xxx.com ({ip}) port 443 (#0) * ALPN, offering http/1.1 * Server aborted the SSL handshake * Closing connection 0 curl: (35) Server aborted the SSL handshake

追記3

conf.dの中にはdefault.confのみで、/etc/nginx/nginx.confからdocker-compose.ymlから設定したdefault.confを読み込むような設定になっていました。
コンテナ内は触っていません。

// /etc/nginx/nginx.conf user {user}; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }

追記4

https を待ち受けているバーチャルサーバーの設定ですが、jwilder/nginx-proxyコンテナに入って確認したところ設定ファイルっぽいものは/etc/nginx/vhost.dくらいしかみつかりませんでした。
こちらもproxy側のdocker-compose.ymlで設定した以外は特に変更していません。

// /etc/nginx/vhost.d ## Start of configuration add by letsencrypt container location ^~ /.well-known/acme-challenge/ { auth_basic off; allow all; root /usr/share/nginx/html; try_files $uri =404; break; } ## End of configuration add by letsencrypt container

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

xenbeat
xenbeat

2019/05/23 07:01

これは一発で回答するのが難しいやつですねぇ。 ご自身である程度問題を切り分けて、質問を細分化すると回答が付きやすいと思いますよ。 ちなみにnginxの設定に「listen 443」が存在しないようですけど。
bws
bws

2019/05/24 03:11

ありがとうございます!無知すぎて、どう切り分けたらいいのかもわからない状況でして、申し訳ないです。 nginxの設定はjwilder/nginx-proxyで設定されているのだけでは不十分でしょうか?
Ebonights
Ebonights

2019/06/02 04:15 編集

1\.以下コードをNginxのdocker-compose\.ymlに入れてみたらどうなりますか?  letsencryptコンテナがどのnginxプロキシコンテナを使用するかを認識するために必要です。 labels: com\.github\.jrcs\.letsencrypt_nginx_proxy_companion\.nginx_proxy: "true" 2\.DNSの設定はwwwと@\(wwwなし\)で双方とも登録されていますか?  私の場合はAレコード以外にもAAAAレコードも実装しました。 それと、可能でしたらDocker-compose upで「-d」をつけずに実行してみてください。 エラーが出ていませんでしょうか。
bws
bws

2019/06/10 03:13

返事が遅くなってしまって申し訳ありませんでした。 1は特に変化ありませんでしたがdocker-compose upしたところ追記のようなエラーが出ていました。 DNSの設定については別の人間が設定しているのでその点も確認してみたいと思います。本当に大変貴重な情報をありがとうございます。
take88
take88

2019/06/10 06:25 編集

curl に `-vk` オプションを付けて 証明書の診断結果が表示されるのでそれを、質問にはり付けてもらえますか?
bws
bws

2019/06/11 01:09

ありがとうございます、追記2へ貼り付けさせてもらいました!
take88
take88

2019/06/13 06:36

curl -kv で 証明書エラーを無視してみたところ SSLライブラリが SSL_ERROR_SYSCALL というエラーを出してますね。これは何らかのIOエラーという意味らしいですが LibreSSL という比較的新しいライブラリでエラーになってます。ちなみに curl を実行しているクライアント側の環境について教えてもらえますか?
bws
bws

2019/06/13 11:01

ありがとうございます!クライアントOSはmacOS Mojave 10\.14\.5です。
take88
take88

2019/06/13 22:40

Mac側の問題かもしれませんね。 回避方法を回答に書くので試してみてください。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。