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

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

新規登録して質問してみよう
ただいま回答率
85.35%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

nginx

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

Docker

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

Q&A

解決済

1回答

1508閲覧

【Docker / nginx / CentOS 8】Let's Encrypt 常時SSL化ができない

saori777

総合スコア6

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

nginx

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

Docker

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

0グッド

0クリップ

投稿2021/05/23 12:32

前提・実現したいこと

SSL化がうまくできません。
Docker/nginx/CentOS8です。
SSL化しなければ、問題なく表示されたことは確認済みです。
(以下、仮のサーバーなので、確認出来次第本番環境で実装します。)

発生している問題・エラーメッセージ

以下URLになります。
160.251.12.146

この接続ではプライバシーが保護されません

該当のソースコード

// ディレクトリ構成 var  ∟www   ∟html    ∟app     ∟inffa      ∟mysql      ∟nginx       ∟default.conf      ∟php     ∟docker-compose.yml     ∟backend      ∟Laravelのファイル群 etc  ∟nginx   ∟ssl    ∟server.crt    ∟server.csr    ∟server.key

1.OpenSSLの設定

cd /etc/nginx/ssl openssl genrsa 2024 > server.key openssl req -new -key server.key > server.csr openssl x509 -req -days 3650 -signkey server.key < server.csr > server.

2.docker-compose.yml

version: "3.8" services: app: build: ./infra/php volumes: - ./backend:/work web: image: nginx:1.18-alpine ports: - 80:80 - 443:443 volumes: - ./backend:/work - ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf - /etc/nginx/ssl:/etc/nginx/ssl working_dir: /work db: build: ./infra/mysql volumes: - db-store:/var/lib/mysql volumes: db-store:

3.default.conf

server { listen 443 ssl; server_name 160.251.12.146; ssl on; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; access_log /var/log/nginx/ssl-access.log; error_log /var/log/nginx/ssl-error.log; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; root /var/www/html; index index.html index.php; charset utf-8; location / { # try_files $uri $uri/ /index.php?$query_string; try_files $uri $uri/ =404; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ .php$ { try_files $uri $uri/ =404; fastcgi_pass app:9000; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /.(?!well-known).* { deny all; } }

試したこと

1.ファイアーウォールの443 portの解放

# firewall-cmd --list-all public (active) ~~~ ports: 443/tcp ~~~

2.VPSサーバーの再起動

3.dockerの再起動

docker-compose down --rmi all --volumes --remove-orphans docker-compose up -d

補足情報(FW/ツールのバージョンなど)

Docker 20.10.6 node v14.16.0 npm 6.14.11

お力添えいただけると幸いです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Let's Encrypt の SSL 証明書は、 /etc/letsencrypt/ 以下に作成されますが、 Docker や nginx の設定で、/etc/nginx/ssl を指定しているのはなにか意味があるのでしょうか?

Let's Encrypt の SSL 証明書は、 90日以内に更新されますので、通常、nginx の設定では、下記のように Let's Encrypt ディレクトリの Live 配下にある最新の SSL 証明書を指定すると思います。

ssl_certificate /etc/letsencrypt/live/www.hogehoge.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.hogehoge.com/privkey.pem;

また、OpenSSLの設定を見る感じでは、/etc/nginx/ssl/server.crt は、自己署名 SSL 証明書(いわゆるオレオレ証明書)でないかと思われます。

Let's Encrypt の SSL 証明書のディレクトリ /etc/letsencrypt/ を Docker と同期して上記のようにSSL設定を行うとどうなるでしょうか?

投稿2021/05/23 13:47

編集2021/05/23 13:48
CHERRY

総合スコア25218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saori777

2021/05/25 04:27

ご丁寧に有難うございます! オレオレ証明書ではなく、CAから受け取った証明書を用いる、という点は理解できました。 確認したところ、 恥ずかしながらLet's Encrypがインストールされていないことに気づきました、、、 そこで、certbotからLet's Encryptを以下コマンドでインストールしようとしたところ、エラーが出てしまいました。 エラーの内容は、「example.comなんてドメインが紐づいていないよ!」というものと認識しているのですが、そもそもLet's Encryptの証明書をnginxに紐づける際、必ずドメインの設定も先に行わないといけないのでしょうか? IPアドレスのみで、Let's Encryptの設定はできないのでしょうか? お手隙の際にお返事いただけると幸いです、、、 ``` dnf --enablerepo=epel install certbot python3-certbot-nginx certbot certonly --webroot -w /var/www/html/app --email sample@sample.com --debug -d example.com Waiting for verification... Challenge failed for domain example.com http-01 challenge for example.com Cleaning up challenges Exiting abnormally: Traceback (most recent call last): File "/usr/bin/certbot", line 11, in <module> load_entry_point('certbot==1.14.0', 'console_scripts', 'certbot')() File "/usr/lib/python3.6/site-packages/certbot/main.py", line 15, in main return internal_main.main(cli_args) File "/usr/lib/python3.6/site-packages/certbot/_internal/main.py", line 1435, in main return config.func(config, plugins) File "/usr/lib/python3.6/site-packages/certbot/_internal/main.py", line 1304, in certonly lineage = _get_and_save_cert(le_client, config, domains, certname, lineage) File "/usr/lib/python3.6/site-packages/certbot/_internal/main.py", line 140, in _get_and_save_cert lineage = le_client.obtain_and_enroll_certificate(domains, certname) File "/usr/lib/python3.6/site-packages/certbot/_internal/client.py", line 444, in obtain_and_enroll_certificate cert, chain, key, _ = self.obtain_certificate(domains) File "/usr/lib/python3.6/site-packages/certbot/_internal/client.py", line 374, in obtain_certificate orderr = self._get_order_and_authorizations(csr.data, self.config.allow_subset_of_names) File "/usr/lib/python3.6/site-packages/certbot/_internal/client.py", line 424, in _get_order_and_authorizations authzr = self.auth_handler.handle_authorizations(orderr, best_effort) File "/usr/lib/python3.6/site-packages/certbot/_internal/auth_handler.py", line 91, in handle_authorizations self._poll_authorizations(authzrs, max_retries, best_effort) File "/usr/lib/python3.6/site-packages/certbot/_internal/auth_handler.py", line 179, in _poll_authorizations raise errors.AuthorizationError('Some challenges have failed.') certbot.errors.AuthorizationError: Some challenges have failed. Please see the logfiles in /var/log/letsencrypt for more details. ```
scsi

2021/06/01 13:30

> 必ずドメインの設定も先に行わないといけないのでしょうか? はい > IPアドレスのみで、Let's Encryptの設定はできないのでしょうか? できません
saori777

2021/06/14 16:03

有難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問