개인 인증서를 사용해서 Notary Service 구동
[Container image 인증 관련 글 목록]
Docker Notary : Docker Content Trust (DCT)
DCT를 사용해서 Dcoker Hub에 서명된 Trust Image Push 하기
Notary와 DCT를 사용해서 Private Registry에 서명된 Trust Image Push하기
개인 인증서를 사용해서 Notary Service 구동
kubernetes image인증 - Portieris
Notary Service Download
[명령어]
(1) git clone https://github.com/theupdateframework/notary.git
(2) cd notary
[참고]
만약 이미 Notary 가 한번이라도 진행 됐었다면
docker rm 명령으로
기존에 동작하던 notary server, signer, mariaDB
3개의 container 를 종료 후 삭제하고
docker rmi 명령으로
기존에 pull 받은 notary 관련 3개의
notary server, signer, mariaDB
image파일도
삭제한 뒤 진행해야함
인증서 생성
GitHub에서 내려받은 Notary에는 기본 인증서가 포함되어 있지만
보안 위협 및 원격 제어 이슈가 있으므로,
OpenSSL을 통해 ROOT CA와 SSL 인증서를 만듬.
Root CA 생성
[CA가 사용할 RSA 키 생성]
명령어 :
openssl genrsa -aes256 -out ./notary_rootca.key 2048
chmod 0600 ./notary_rootca.key
[CSR 생성을 위한 conf 명세]
notary_rootca.conf 파일 생성
[ req ] default_bits = 2048 default_md = sha256 default_keyfile = notary_rootca.key distinguished_name = req_distinguished_name extensions = v3_ca req_extensions = v3_ca [ v3_ca ] basicConstraints = critical, CA:TRUE, pathlen:0 subjectKeyIdentifier = hash keyUsage = keyCertSign, cRLSign nsCertType = sslCA, emailCA, objCA [req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = KR countryName_min = 2 countryName_max = 2 organizationName = Organization Name organizationName_default = TEST organizationalUnitName = Unit Name organizationalUnitName_default= IKSOON commonName = Common Name (e.g. user or host name) commonName_default = Notary commonName_max = 64 |
[CSR 생성]
명령어: openssl req -new -key ./notary_rootca.key -out ./notary_rootca.csr -config ./notary_rootca.conf
입력하는 항목에서는 모두 엔터로 넘어감.
[인증서 생성]
명령어 : openssl x509 -req -days 365 -extensions v3_ca -set_serial 1 -in ./notary_rootca.csr -signkey ./notary_rootca.key -out ./root-ca.crt -extfile ./notary_rootca.conf
[생성된 인증서 확인]
3개의 파일이 생성되어있음
crt, csr, key
명령어 : openssl x509 -text -in ./notary_rootca.crt
SSL 인증서 생성 (Notary Server)
[RSA키 생성]
명령어 : openssl genrsa -aes256 -out ./notary-server-enc.key 2048
- genrsa : RSA방식으로 개인기 생성
- aes256bit : 개인키를 AES128 로 암호화
[RSA키에서 passphrase를 제거]
직전에 생성한 RSA 키는 passphrase와 함께 key-derived function을 통해 암호화되어 있음.
이 경우 https 서비스를 구동할 때마다 passphrase를 입력해야 하므로 복호화된 키를 산출함.
- aes256bit로 암호화된 개인키를 다시 복호화함.
- 원래 애초에 aes256bit 암호화를 안해도 되는데 이런 옵션이 있다는것을 써보기 위해 해봄
명령어 : openssl rsa -in ./notary-server-enc.key -out ./notary-server.key
[CSR 생성을 위한 conf 명세]
notary-server.conf 파일 생성
DNS.1 : 설정되는 IP는 해당 Notary 가 설치되고 있는 IP와 연동된 dn : notary-server를 넣어줌
-vi /etc/hosts 에 notary 가 설치될 ip 와 notarysigner 를 넣어줌
[ req ] default_bits = 2048 default_md = sha256 default_keyfile = notary-server.key distinguished_name = req_distinguished_name extensions = v3_user [ v3_user ] basicConstraints = CA:FALSE authorityKeyIdentifier = keyid,issuer subjectKeyIdentifier = hash keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth,clientAuth subjectAltName = @alt_names [ alt_names] DNS.1 = notary-server [req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = KR countryName_min = 2 countryName_max = 2 organizationName = Organization Name (eg, company) organizationName_default = TEST organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = IKSOON commonName = Common Name (eg, your name or your server's hostname) commonName_default = Notary commonName_max = 64 |
[CSR 생성]
명령어: openssl req -new -key ./notary-server.key -out ./notary-server.csr -config ./notary-server.conf
입력하는 항목에서는 모두 엔터로 넘어감.
[인증서 생성]
명령어: openssl x509 -req -days 365 -extensions v3_user -in ./notary-server.csr -CA ./root-ca.crt -CAcreateserial -CAkey ./notary_rootca.key -out ./notary-server.crt -extfile ./notary-server.conf
[생성된 인증서 확인]
3개의 파일이 생성되어있음
crt, csr, enc-key, key
명령어 : openssl x509 -text -in ./notary-server.crt
SSL 인증서 생성 (Notary Signer)
상위 Server 인증서 생성하는 과정과 동일함.
openssl genrsa -aes256 -out ./notary-signer-enc.key 2048
openssl rsa -in ./notary-signer-enc.key -out ./notary-signer.key
[CSR 생성을 위한 conf 명세]
notary-signer.conf 파일 생성
DNS.1 : 설정되는 IP는 해당 Notary 가 설치되고 있는 IP와 연동된 dn : notarysigner 를 넣어줌
-vi /etc/hosts 에 notary 가 설치될 ip 와 notarysigner 를 넣어줌
[ req ] default_bits = 2048 default_md = sha256 default_keyfile = notary-signer.key distinguished_name = req_distinguished_name extensions = v3_user [ v3_user ] basicConstraints = CA:FALSE authorityKeyIdentifier = keyid,issuer subjectKeyIdentifier = hash keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth,clientAuth subjectAltName = @alt_names [ alt_names] DNS.1 = notarysigner [req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = KR countryName_min = 2 countryName_max = 2 organizationName = Organization Name (eg, company) organizationName_default = TEST organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = IKSOON commonName = Common Name (eg, your name or your server's hostname) commonName_default = Notary commonName_max = 64 |
openssl req -new -key ./notary-signer.key -out ./notary-signer.csr -config ./notary-signer.conf
openssl x509 -req -days 365 -extensions v3_user -in ./notary-signer.csr -CA ./root-ca.crt -CAcreateserial -CAkey ./notary_rootca.key -out ./notary-signer.crt -extfile ./notary-signer.conf
생성한 인증서를 기존 Notary 인증서와 교체
상위에서 생성한
root-ca.key
notary-server.key
notary-server.crt
notary-signer.key
notary-signer.crt
5개의 키를
~/notary/fixture
directory 로 이동.
결과
인증서 교체를 완료하고
notary directory 에서
docker-compose up
명령 실행 시
생성한 인증서로 정상동작 확인
제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!
'클라우드 > Docker' 카테고리의 다른 글
16. Windows 2019 Docker 설치 (0) | 2021.10.20 |
---|---|
15. Docker 구조 (0) | 2021.10.20 |
13. Notary와 DCT를 사용해서 Private Registry에 서명된 Trust Image Push 하기 (3) | 2020.11.08 |
12. DCT를 사용해서 Docker Hub에 서명된 Trust Image Push 하기 (0) | 2020.11.08 |
11. Docker Notary : Docker Content Trust ( DCT ) (3) | 2020.11.08 |