Docker php-apache를 자체 인증서로 SSL 대응 (자신 메모)

마지막 기사 에서 php-apache+mysql을 만들었는데, 이번에는 그것을 자기 증명서를 만들고 SSL 대응할 때까지를 써갑니다.
목표는 크롬에서 경고없이 액세스 할 수있을 때까지입니다.

환경



기계 macOS Catalina 10.15.7

구성



전회 종료시 이런 느낌으로 끝
任意のディレクトリ
  │
  ├── docker-compose.yml
  │
  ├── html/
  │   └── index.html
  │
  ├── mysql/
  │   ├── Dockerfile
  │   ├── data/
  │   ├── init/
  │   │   └── init.sql
  │   └── my.cnf
  │
  ├── php-apahce/
      ├── Dockerfile
      └── php.ini



이번에는 이런 느낌이 듭니다.
任意のディレクトリ
  │
  ├── docker-compose.yml 更新
  │
  ├── html/
  │   └── index.html
  │
  ├── mysql/
  │   ├── Dockerfile
  │   ├── data/
  │   ├── init/
  │   │   └── init.sql
  │   └── my.cnf
  │
  ├── php-apahce/
      ├── Dockerfile 更新
      ├── ssl.conf 追加
      └── ssl/
          ├──ssl.key 追加
          └──ssl.crt 追加

건설



바로 시작합시다.

자체 인증서 만들기



우선 자기증명서를 만들어보자
우선 디렉토리를 만들어 이동
ksk@ksknoMacBook-Pro work % mkdir php-apache/ssl
ksk@ksknoMacBook-Pro work % cd php-apache/ssl

개인 키 생성


ksk@ksknoMacBook-Pro ssl % openssl genrsa -out ssl.key 2048

Generating RSA private key, 2048 bit long modulus
............+++
.+++
e is 65537 (0x10001)

CSR 만들기



Common Name만 'localhost'를 입력하고 나중에 모두 Enter
ksk@ksknoMacBook-Pro ssl % openssl req -new -sha256 -key ssl.key -out ssl.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 []:
error, no objects specified in config file
problems making Certificate Request

san.txt 만들기



최근 자체 인증서로 크롬 경고를 피하려면 이것이 있든간에
ksk@ksknoMacBook-Pro ssl % echo "subjectAltName = DNS:localhost" > san.txt

인증서 만들기



10년이나 하면 경고가 나온 것 같아서 1년으로 했습니다.
ksk@ksknoMacBook-Pro ssl % openssl x509 -req -sha256 -days 365 -signkey ssl.key -in ssl.csr -out ssl.crt -extfile san.txt

인증서 준비 완료

ssl.conf



ssl.conf를 이전에 만든 기존 컨테이너의 ssl.conf를 기반으로 만들고 싶기 때문에 우선 컨테이너의 상태 확인
ksk@ksknoMacBook-Pro ssl % cd ../
ksk@ksknoMacBook-Pro php-apache % docker container ls -a
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                         NAMES
4c43e97e5c37   work_mysql        "docker-entrypoint.s…"   20 minutes ago   Up 20 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp             db
35889b716286   work_php-apache   "docker-php-entrypoi…"   20 minutes ago   Up 20 minutes   0.0.0.0:8080->80/tcp                          web

웹 컨테이너의 컨테이너 ID를 사용하여 ssl.conf를 로컬로 복사
ksk@ksknoMacBook-Pro php-apache % docker cp 35889b716286:/etc/apache2/sites-available/ssl.conf ./

ssl.conf 편집
/etc/httpd/ssl/에 배치한다.

ssl.conf
〜〜〜
SSLCertificateFile    /etc/httpd/ssl/ssl.crt
SSLCertificateKeyFile /etc/httpd/ssl/ssl.key
〜〜〜

Dockerfile 편집



마지막 기사에서 보면,
RUN mkdir -p/etc/httpd/ssl
이후를 추기하고 있습니다.
FROM php:7.4-apache
COPY ./php.ini /usr/local/etc/php/
RUN apt-get update
RUN apt-get install -y zip unzip vim libpng-dev libpq-dev
RUN docker-php-ext-install pdo_mysql

RUN mkdir -p /etc/httpd/ssl
RUN a2enmod ssl
COPY ./ssl.conf /etc/apache2/sites-available/ssl.conf
COPY ./ssl/ssl.key /etc/httpd/ssl/ssl.key
COPY ./ssl/ssl.crt /etc/httpd/ssl/ssl.crt
RUN a2ensite ssl

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

docker-compose.yml 편집



8443-443 포트에 연결 가능

docker-compose.yml
version: '3'
services:
  php-apache:
    build: ./php-apache/
    volumes:
      - ./html:/var/www/html
    ports:
      - 8080:80
      - 8443:443
    container_name: web
  mysql:
    build: ./mysql/
    volumes:
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    environment:
      - MYSQL_ROOT_PASSWORD=docker
      - MYSQL_DATABASE=mydb
      - MYSQL_USER=appuser
      - MYSQL_PASSWORD=appuser1
    container_name: db
    ports:
      - 3306:3306

이것으로 우선 준비 완료

다시 build& 시작



우선 이전의 녀석 남아 있으면 지웁니다.
ksk@ksknoMacBook-Pro cd ../
ksk@ksknoMacBook-Pro work docker container stop web
ksk@ksknoMacBook-Pro work docker container rm web
ksk@ksknoMacBook-Pro work docker container stop db
ksk@ksknoMacBook-Pro work docker container rm db

build 과 기동
ksk@ksknoMacBook-Pro work docker-compose build
ksk@ksknoMacBook-Pro work docker-compose up -d

시작 확인
ksk@ksknoMacBook-Pro work % dodker container ls -a
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                         NAMES
4c43e97e5c37   work_mysql        "docker-entrypoint.s…"   20 minutes ago   Up 20 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp             db
35889b716286   work_php-apache   "docker-php-entrypoi…"   20 minutes ago   Up 20 minutes   0.0.0.0:8080->80/tcp, 0.0.0.0:8443->443/tcp   web

인증서 등록



방금 전 ssl.crt가 들어있는 폴더에 액세스하십시오.

이것을 더블 클릭

키 체인은 시스템에서 추가를 누르십시오.


키체인 열면 방금 등록한 인증서가 도메인 이름으로 나타나므로 두 번 클릭합니다.
「이 증명서를 사용할 때」를 「항상 신뢰」로 하면 모든 것이 「항상 신뢰」가 되므로, 그래서 이 윈도우를 닫아 주세요.


마지막으로 화면에 액세스하여 확인
경고 없이, 주소 옆의 열쇠 마크도 불안한 공기를 빼지 않고 접근할 수 있었습니다.


이상.

좋은 웹페이지 즐겨찾기