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.)