Docker php-apache를 자체 인증서로 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.ymlversion: '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가 들어있는 폴더에 액세스하십시오.
 
이것을 더블 클릭
키 체인은 시스템에서 추가를 누르십시오.
 
키체인 열면 방금 등록한 인증서가 도메인 이름으로 나타나므로 두 번 클릭합니다.
「이 증명서를 사용할 때」를 「항상 신뢰」로 하면 모든 것이 「항상 신뢰」가 되므로, 그래서 이 윈도우를 닫아 주세요.
 
마지막으로 화면에 액세스하여 확인
경고 없이, 주소 옆의 열쇠 마크도 불안한 공기를 빼지 않고 접근할 수 있었습니다.
 
이상.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Docker php-apache를 자체 인증서로 SSL 대응 (자신 메모)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/ukei2021/items/9fd5a46253f0a43f7ddb
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
전회 종료시 이런 느낌으로 끝
任意のディレクトリ
  │
  ├── 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.ymlversion: '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가 들어있는 폴더에 액세스하십시오.
 
이것을 더블 클릭
키 체인은 시스템에서 추가를 누르십시오.
 
키체인 열면 방금 등록한 인증서가 도메인 이름으로 나타나므로 두 번 클릭합니다.
「이 증명서를 사용할 때」를 「항상 신뢰」로 하면 모든 것이 「항상 신뢰」가 되므로, 그래서 이 윈도우를 닫아 주세요.
 
마지막으로 화면에 액세스하여 확인
경고 없이, 주소 옆의 열쇠 마크도 불안한 공기를 빼지 않고 접근할 수 있었습니다.
 
이상.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Docker php-apache를 자체 인증서로 SSL 대응 (자신 메모)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/ukei2021/items/9fd5a46253f0a43f7ddb
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
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)
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
ksk@ksknoMacBook-Pro ssl % echo "subjectAltName = DNS:localhost" > san.txt
ksk@ksknoMacBook-Pro ssl % openssl x509 -req -sha256 -days 365 -signkey ssl.key -in ssl.csr -out ssl.crt -extfile san.txt
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
ksk@ksknoMacBook-Pro php-apache % docker cp 35889b716286:/etc/apache2/sites-available/ssl.conf ./
〜〜〜
SSLCertificateFile    /etc/httpd/ssl/ssl.crt
SSLCertificateKeyFile /etc/httpd/ssl/ssl.key
〜〜〜
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"]
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
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
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
Reference
이 문제에 관하여(Docker php-apache를 자체 인증서로 SSL 대응 (자신 메모)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ukei2021/items/9fd5a46253f0a43f7ddb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)