rein's world

TIL: OpenSSL로 SAN 확인하기

Bluesky 핸들을 내가 쓰는 도메인의 서브 도메인인 jinuk.prgmr.dev 를 사용하는데, 저 주소를 입력하면 Bluesky로 자동으로 옮겨지도록 설정해서 쓰고 있다. 이걸 위해서 웹 서버를 따로 돌리는건 아니고, 원래 쓰던 서버에 추가로 subject alternative name (SAN)으로 저 서브 도메인을 추가해서 쓰고 있다.

대강 3개월마다 갱신해야하는 “Let’s Encrypt” 인증서를 쓰고 있는데, 접속하자마자 HTTP 302로 Bksy로 보내버려서 브라우저에서 확인하긴 쉽지 않다. 그래서 이번 기회에 CLI로 확인할 방법을 찾아보니 Stackoverflow 답변이 바로 나와서 잘 썼다.

TLS 연결을 통해서 확인하는 방법

openssl s_client -connect www.prgmr.dev:443 -showcerts < /dev/null \
    | openssl x509 -noout -text \
    | grep -A1 'Subject Alternative Name'
Connecting to ...
depth=2 C=US, O=Internet Security Research Group, CN=ISRG Root X1
verify return:1
depth=1 C=US, O=Let's Encrypt, CN=E6
verify return:1
depth=0 CN=www.prgmr.dev
verify return:1
DONE
            X509v3 Subject Alternative Name:
                DNS:jinuk.prgmr.dev, DNS:prgmr.dev, DNS:www.prgmr.dev

마지막 줄에 내가 원하는 결과 – 어떤 DNS 주소가 인증서의 추가적인 대체 주소인지 – 가 나와있다.

서버에 있는 인증서 파일에서 확인하기

cat /etc/letsencrypt/live/pgrmr.dev/cert.pem \
    | openssl x509 -noout -text \
    | grep -A1 'Subject Alternative Name'
            X509v3 Subject Alternative Name:
                DNS:jinuk.prgmr.dev, DNS:prgmr.dev, DNS:www.prgmr.dev