반응형

폐쇄망 로컬 환경 CA-signed SSL 인증서(“trusted” self-signed certificate)

[참조] https://oboki.net/workspace/system/linux/how-to-use-trusted-self-signed-certificate-for-local-secure-env/

 

오복이네 oboki.net

오복애비의 데이터엔지니어링 기록

oboki.net

 

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=/

 

반응형

+ Recent posts