Доверие самозаверяющему SSL-сертификату для локального хоста (не в интерактивном режиме) - PullRequest
0 голосов
/ 27 декабря 2018

Я настроил HTTPS на локальном хосте со следующим Dockerfile:

FROM ubuntu:latest
ENV DEBIAN_FRONTEND=noninteractive TZ=America/New_York APACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data APACHE_LOG_DIR=/var/log/apache2 APACHE_LOCK_DIR=/var/lock/apache2 APACHE_PID_FILE=/var/run/apache2.pid
COPY . /var/www/html
WORKDIR /var/www/html
# install apache, php, ssl cert for localhost
RUN apt-get update && \
  apt-get -y install apt-utils tzdata apache2 php libapache2-mod-php && \
  ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
  a2enmod ssl headers rewrite && \
  mv ./apache/ssl-cert-snakeoil.pem /etc/ssl/certs/ssl-cert-snakeoil.pem && \
  mv ./apache/ssl-cert-snakeoil.key /etc/ssl/private/ssl-cert-snakeoil.key && \
  mv ./apache/000-default.conf /etc/apache2/sites-available/000-default.conf
EXPOSE 80 443
# start webserver
CMD /usr/sbin/apache2ctl -D FOREGROUND

Где ssl-cert-snakeoil.pem и ssl-cert-snakeoil.key были созданы с:

openssl req -x509 -out ssl-cert-snakeoil.pem -keyout ssl-cert-snakeoil.key \
  -newkey rsa:2048 -nodes -sha256 \
  -subj '/CN=localhost' -extensions EXT -config <( \
   printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

и 000-default.confвыглядит так:

<VirtualHost *:80>
    ServerName localhost
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/var/www/html/"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "/etc/ssl/certs/ssl-cert-snakeoil.pem"
    SSLCertificateKeyFile "/etc/ssl/private/ssl-cert-snakeoil.key"
</VirtualHost>

Теперь я могу получить доступ к https://localhost в своем браузере, но он выдает предупреждение о том, что сертификат не является доверенным.Я понимаю, что могу добавить сертификат в хранилище доверенных сертификатов браузера, но моя цель состоит в том, чтобы другие программы, работающие в контейнерах, могли иметь доступ к https://localhost на хост-компьютере.

Другие ответы на StackExchange (1 , 2 , 3 ) говорят, что я смогу сделать это, переместив мой ssl-cert-snakeoil.pem из контейнера, обслуживающего https://localhost, в тот, кто хочет получить к нему доступ конкретнок одному из /usr/share/ca-certificates/, /usr/local/share/ca-certificates/, /etc/ssl/certs/ (в зависимости от ответа), а затем к одному из dpkg-reconfigure ca-certificates или update-ca-certificates --fresh (опять же, в зависимости от ответа).

Итак,Я запускаю контейнер с docker run --network="host" -it ubuntu /bin/bash, добавляю сертификаты в разные места и запускаю различные команды, но ничего не получится.Запуск dpkg-reconfigure ca-certificates выглядит многообещающе, потому что он на самом деле побуждает меня сказать: «Этот пакет устанавливает общие сертификаты CA (центра сертификации) в / usr / share / ca-Certificates», а затем просит меня выбрать из списка CA, который я выяснил Я мог бы добавить к echo /path/to/cert.crt >> /etc/ca-certificates.conf.Но это не сработает.

Я выполнил все эти шаги и все их комбинации, но когда я пытаюсь curl https://localhost, я все равно получаю curl: (60) SSL certificate problem: unable to get local issuer certificate.Точно так же PHP жалуется, когда я пытаюсь запустить <?php echo file_get_contents("https://localhost");, говоря PHP Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in /t.php on line 1.Что я делаю неправильно?Кроме того, поскольку я пытаюсь выполнить все это в Dockerfile, мне нужен способ запуска dpkg-reconfigure ca-certificates неинтерактивно (если это действительно правильная команда).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...