Published on

네이버 클라우드 certificate manager에 Lets encrypt 인증서 등록하기

Authors
  • avatar
    Name
    Jay
    Twitter

Let's Encrypt로 인증서 발급

Ubuntu20.04 네이버 클라우스 서버에서 certbot을 설치하여 Let's encrypt 인증서를 발급하였다. Ubuntu 20.04에서 설치하는 것은 이 글을 참고하였다.

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
$ certbot --version
certbot 2.7.1

이제 아래와 같이 dns로 check하도록 설정하여 인증서를 발급하였다.

certbot certonly --manual -d *.example.com -d example.com --preferred-challenges dns-01

TXT record를 안내에 따라서 생성해주면 검증이 완료되어서 인증서 발급이 완료가 된다. /etc/letsencrypt/live/example.com에서 아래와 같이 생성된 것을 확인할 수 있다.

  • cert.pem
  • chain.pem
  • fullchain.pem
  • privkey.pem

인증서 암호화 알고리즘 검증 실패입니다.

이제 발급된 인증서 정보를 네이버 클라우드 certificate manager에 등록하는데 아래와 같은 에러가 발생하였다.

error to register certificate on naver cloud

openssl로 인증서 정보를 확인해보면,

openssl x509 -in cert.pem -text -noout

아래와 같이 id-ecPublicKey로 설정되어 있는 것을 확인할 수 있다.

Subject Public Key Info:
  Public Key Algorithm: id-ecPublicKey
      Public-Key: (256 bit)
      pub:

Let's encrypt의 certificate를 확인해보면

openssl x509 -in lets-encrypt-r3.pem -text -noout

아래처럼 RSA로 되어 있는 것을 확인할 수 있다.

Subject Public Key Info:
  Public Key Algorithm: rsaEncryption

따라서 이것을 동일하게 맞춰주기 위해서 --key-type을 RSA를 해준다.

certbot certonly --manual -d *.example.com -d example.com \
  --preferred-challenges dns-01 \
  --key-type rsa

이제 해당 에러는 해결이 된다.

인증서가 유효하지 않습니다.

이제 앞의 에러는 해결했는데, 인증서가 유효하지 않습니다라고 에러가 발생하면서 등록이 되지 않는다. 🤪

이제 chain을 보면 마지막에 CA 부분인데, 그 부분만 따로 인증서 정보를 확인해보니

openssl x509 -in ca_from_chain.pem -text -noout

Issuer가 DST Root CA X3으로 되어 있는 것을 확인할 수 있었다.

Issuer: O = Digital Signature Trust Co., CN = DST Root CA X3
Validity
  Not Before: Jan 20 19:14:03 2021 GMT
  Not After : Sep 30 18:14:03 2024 GMT
Subject: C = US, O = Internet Security Research Group, CN = ISRG Root X1

let's encrypt 글을 보면 DST Root CA X3은 old version을 위해서 유지되고 있다. 5년 전부터 ISRG Root X1를 사용하고 있었고, DST Root CA X3에서도 사용할 수 있고 cross-signing으로 되어 있기 때문에 위에서처럼 마지막 certificate의 Issuer가 DST Root CA X3로 되어 있다.

  • website certicate
  • Let’s Encrypt R3
  • ISRG Root X1
  • DST Root CA X3

이제 네이버 클라우드 Certificate manager에서는 CA certificate를 추가해줘야하는 것으로 보인다. 따라서 Let's encrypt의 certificate에서 아래 그림과 같이 Root certificate를 다운로드해서 fullchain.pem에 추가해줬다.

ca certificate from lets encrypt web page

하지만 생성된 fullchain.pem이 DST Root CA X3로 cross-signing으로 되어 있기 때문에, 네이버 클라우드 Certificate Manager에 올리면 인증서가 유효하지 않습니다라는 에러가 발생하였다. 그래서 chain의 마지막 Root CA 인증서를 추가하지 않고, 교체했다.

  • website certicate
  • Let’s Encrypt R3
  • ISRG Root X1
  • DST Root CA X3 => Root CA 인증서로 교체

이제 정상적으로 등록이 된다.

기타

Ubuntu CA trust store

위에서 certbot을 셋팅해서 사용한 ubuntu20.04 서버에서 CA trust store에 저장되어 있는 걸 보면

awk -v cmd='openssl x509 -noout -subject' '
    /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt

아래처럼 ISRG Root X1가 보인다.

subject=C = US, O = Internet Security Research Group, CN = ISRG Root X1

--preferred-chain Option

🤔 certbot 명령어로 cross-signing이 아니라 ISRG Root X1를 사용하도록 설정하는 방법이 없나? --preferred-chain 'SRG Root X1'은 Intemediate certificate가 생성되지 않는다.