폐쇄망 로컬 환경 CA-signed SSL 인증서(“trusted” self-signed certificate)
self-signed root CA 인증서 발급
먼저 다음과 같이 private key 를 만들어야하는데
openssl genrsa -des3 -out localCA.key 2048
pass phrase 를 입력하지 않으면 에러가 발생하니 꼭 입력하고 잘 기억해두어야 한다.
Generating RSA private key, 2048 bit long modulus
.........................+++
..+++ e is 65537 (0x10001)
Enter pass phrase for localCA.key: # 아무것도 입력하지 않으면 아래와 같이 에러 발생 139743430993808:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:831:You must type in 4 to 1023 characters Enter pass phrase for localCA.key:
Verifying - Enter pass phrase for localCA.key:
localCA.key 파일이 생성되었으면 이 private key 를 이용해서 root CA 인증서를 다음과 같이 만들어준다.
openssl req -x509 -new -nodes -key localCA.key -sha256 -days 365 -out localCA.pem
Enter pass phrase for localCA.key:
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) [XX]:KR
State or Province Name (full name) []:Seoul
Locality Name (eg, city) [Default City]:DDM
Organization Name (eg, company) [Default Company Ltd]:Virtual Machines. OBOKI. net.
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vm.oboki.net
Email Address []:papa@oboki.net
localCA.pem 파일이 생성되었으면 root CA 인증서 발급 끝
OS 별 root CA 등록 방법
Windows 클라이언트
openssl x509 -outform der -in localCA.pem -out localCA.crt
crt 해당 파일을 더블클릭해서 인증서 설치 버튼을 눌러 간단히 설치하거나, 관리자 권한으로 cmd를 열어 certmgr 를 입력하면 인증서 관리자가 실행되는데 아래와 같이 신뢰할 수 있는 루트 인증 기관에 CA 인증서를 추가해주면 된다.
Linux
CentOS7 기준 /etc/pki/ca-trust/source/anchors/ 위치에 앞서 생성한 root CA 인증서를 복사해두고 update-ca-trust 명령만으로 간단하게 등록할 수 있다.
cp localCA.pem /etc/pki/ca-trust/source/anchors/.
update-ca-trust
Mac OS X
맥에서도 root CA 인증서를 가져와서 다음과 같이 CLI 로 등록할 수도 있고 Keychain 앱을 통해 화면으로 등록할 수도 있다.
sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" localCA.pem
CA-signed 인증서 생성
이제부터는 생성된 root CA 인증서를 이용해서 필요한 호스트들을 내맘대로 무차별적으로 인증해줄 수 있는데 인증하고자 하는 호스트에 대해 다음과 같이 private key를 생성
openssl genrsa -out airflow.centos.vm.oboki.net.key 2048
Generating RSA private key, 2048 bit long modulus
.........................+++
..............+++
e is 65537 (0x10001)
CSR을 생성
openssl req -new -key airflow.centos.vm.oboki.net.key -out airflow.centos.vm.oboki.net.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) [XX]:KR
State or Province Name (full name) []:Seoul
Locality Name (eg, city) [Default City]:DDM
Organization Name (eg, company) [Default Company Ltd]:Airflow
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:airflow.centos.vm.oboki.net
Email Address []:papa@oboki.net
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
다음과 같은 설정 파일을 작성한 뒤
vim airflow.centos.vm.oboki.net.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = airflow.centos.vm.oboki.net
다음 명령을 수행해서 pass phrase 를 입력해주면 airflow.centos.vm.oboki.net 호스트를 centos.vm.oboki.net CA 가 인증하는 인증서를 발급할 수 있다.
openssl x509 -req -in airflow.centos.vm.oboki.net.csr -CA localCA.pem -CAkey localCA.key -CAcreateserial \ -out airflow.centos.vm.oboki.net.crt -days 365 -sha256 -extfile airflow.centos.vm.oboki.net.ext
Signature ok subject=/C=KR/ST=Seoul/L=DDM/O=Airflow/CN=airflow.centos.vm.oboki.net/emailAddress=papa@oboki.net
Getting CA Private Key
Enter pass phrase for localCA.key:
발급된 인증서를 웹서버에 등록해서 클라이언트에서 접근해보면 다음과 같이 보안 경고 없이 정상적으로 응답해주는 것을 확인할 수 있다.
개인적으로 웹브라우저에서 주의 요함이 아닌 초록색 자물쇠가 뜨는 것에서 오는 만족감이 정말 큰 것 같다.
서버간의 통신에서도 원래는 아래처럼 보안 경고가 발생하는데
# curl -I https://airflow.centos.vm.oboki.net
curl: (60) Peer's Certificate issuer is not recognized.
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
이제는 아래처럼 정상 응답이 오는 것을 확인할 수 있다.
# curl -I https://airflow.centos.vm.oboki.net
HTTP/1.1 302 FOUND
Server: nginx/1.19.1
Date: Sun, 26 Jul 2020 14:23:18 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 217
Connection: keep-alive
Location: http://airflow.centos.vm.oboki.net/home
Vary: Cookie
Set-Cookie: session=eyJfcGVybWFuZW50Ijp0cnVlfQ.Xx2R1g.Se8JyvqlgR9nIltqP8Xnc7Sp3Sc; Expires=Tue, 25-Aug-2020 14:23:18 GMT; HttpOnly; Path=/
'소프트웨어 개발&환경' 카테고리의 다른 글
컴파일러 만들기 (0) | 2023.10.21 |
---|---|
JEUS (제우스) 가이드 링크 (0) | 2023.10.18 |
MAU, DAU, MCU, ACU 의미 (0) | 2023.06.11 |
Microsoft C++ Build Tools 다운로드 (0) | 2023.05.15 |
주피터노트북 vscode에서 설치 및 사용법 (0) | 2023.03.31 |