server-side/nginx

nginx Verify return code: 21 (unable to verify the first certificate)

C/H 2017. 3. 6. 08:30


인증서 파일 설명

파일 종류 설명

.crt - 서버응답인증서 (CA에서 발급된 인증서 PEM 텍스트)
.key - CSR 자동생성 신청시, 같이 자동 생성된 개인키 (SHA1 알고리즘, PEM 텍스트, 패스워드 없음)
.pfx - 개인키+서버응답인증서 패키징된 인증서 (설치시 암호 필요)
.pfx.txt - pfx 를 이용해서 인증서 설치시 필요한 해제 암호
.Chain.zip - 설치가 필수인 체인 인증서 모음 압축 파일 

주요 상품별 체인 인증서

[Positive 계열 상품]
루트 인증서 : AddTrustExternalCARoot.crt
체인 인증서 : PositiveSSLCA2.crt

[Comodo 계열 상품]
루트 인증서 : AddTrustExternalCARoot.crt
체인 인증서 : COMODOSSLCA.crt

[Free 30 Days 상품]
루트 인증서 : AddTrustExternalCARoot.crt
체인 인증서 : UTNAddTrustSGCCA.crt
체인 인증서 : ComodoUTNSGCCA.crt
체인 인증서 : EssentialSSLCA_2.crt

[EV 상품]
루트 인증서 : AddTrustExternalCARoot.crt
체인 인증서 : COMODOAddTrustServerCA.crt
체인 인증서 : COMODOExtendedValidationSecureServerCA.crt

Nginx SSL 설정

ssl on;
ssl_certificate "/etc/pki/nginx/domain.crt";
ssl_certificate_key "/etc/pki/nginx/domain.ca2";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout  10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

인증서 테스트

openssl s_client -showcerts -connect chat.domaon.com:443
depth=0 /OU=Domain Control Validated/OU=Hosted by Korea Information Certificate Authority, Inc./OU=PositiveSSL Wildcard/CN=*.happytalk.io
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/OU=Hosted by Korea Information Certificate Authority, Inc./OU=PositiveSSL Wildcard/CN=*.happytalk.io
verify error:num=27:certificate not trusted
verify return:1
depth=0 /OU=Domain Control Validated/OU=Hosted by Korea Information Certificate Authority, Inc./OU=PositiveSSL Wildcard/CN=*.happytalk.io
verify error:num=21:unable to verify the first certificate
verify return:1
...
Verify return code: 21 (unable to verify the first certificate)
...

cat cert.pem RootCA.crt ChainCA.crt > new_cert.pem

systemctl restart nginx.service; systemctl status nginx.service; openssl s_client -showcerts -connect chat.domaon.com:443
...
Verify return code: 21 (unable to verify the first certificate)
...

cat doamin.crt COMODORSADomainValidationSecureServerCA.crt  COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > domain.ssl.crt
systemctl restart nginx.service; systemctl status nginx.service; openssl s_client -showcerts -connect chat.domaon.com:443
...
Verify return code: 21 (unable to verify the first certificate)
...

cat domain.crt rsa-dv.chain-bundle.pem AddTrustExternalCARoot.crt > domain.ca2 #설정오류
cat domain.key rsa-dv.chain-bundle.pem AddTrustExternalCARoot.crt > domain.ca2
cat domain.crt domain.key rsa-dv.chain-bundle.pem AddTrustExternalCARoot.crt > domain.ca2


# https://www.securesign.kr/tools/online-check-ssl-installation? 에서 확인 결과 Chain Trusted 오류 확인
# 아....... 음...... 이건 좀 더 시간이 필요할 거 같다.
# 결국 클라이언트에서 인증서 검증을 하지 않는 옵션사용

프로젝트 시간이 더 필요해...

반응형