ssl certificate 만료가 다가와서 갱신을 해야 하고, 이미 발급받은 파일이 있습니다. 그래서 다음과 같이 했는데 오류가 발생하면서 안 되는데 혹시 아시는 분 계실까요.
1. 기존 파일 대신 새로운 .crt와 .key 파일을 같은 path에 위치(물론 nginx conf에서도 확인)
2. nginx -s reload로 재시작
3. test request를 날려보면 다음과 같은 오류 메시지 출력(기존 파일로 다시 바꾸고 재시작하면 당연히 정상적인 response 받음)
curl: (60) SSL certificate problem: self signed certificate in certificate chain
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
1. 기존 CA 인증서 목록 사용
curl -v --request POST 'https://<server>/healthcheck'
2. 새 CA 인증서 목록 사용
curl -k -O https://curl.haxx.se/ca/cacert.pem
curl -v --cacert cacert.pem --request POST 'https://<server>/healthcheck'
둘 다 서버에서 기존 ssl certificate 사용시에는 OK, 새거 사용시에는 문제가 발생합니다.
답글 주셔서 감사합니다. 제 mac에서 한 결과입니다. 특별히 무슨 오류가 있는지는 잘 모르겠습니다.
❯ openssl s_client -connect <server>:443
depth=0 CN = *.<xyz>.local
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = *.<xyz>.local
verify error:num=21:unable to verify the first certificate
verify return:1
CONNECTED(00000005)
---
Certificate chain
0 s:/CN=*.<xyz>.local
i:/DC=local/DC=<xyz>/CN=<xyz>-hkgsubcorp-CA
---
Server certificate
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
subject=/CN=*.<xyz>.local
issuer=/DC=local/DC=<xyz>/CN=<xyz>-hkgsubcorp-CA
---
No client certificate CA names sent
Server Temp Key: ECDH, P-384, 384 bits
---
SSL handshake has read 1953 bytes and written 354 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: 64E3...
Session-ID-ctx:
Master-Key: 6363...
Start Time: 1596585742
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---
도움 주셔서 감사합니다. 중간에 자른 부분에 다른 certificate 정보가 없습니다. 그래서 생략했었습니다. intermediate 인증서에 대한 부분을 검색하다 봤었는데, 현재 동작하는 기존 인증서에도 intermediate이 없습니다. 위의 openssl 결과가 그거구요. 그래서 다른 인증서를 새로 합칠 거도 없었구요 -_-a
기존 인증서는 하나인데, 새로 받은 인증서를 설치해보고 하니 intermediate이 나오네요. root로 나오는게 중간에 있는데 이게 원인일까요?
❯ openssl s_client -connect <server>.<xyz>.local:443 -servername <server>.<xyz>.local -showcerts
CONNECTED(00000005)
depth=2 DC = local, DC = <xyz>, CN = <xyz>-root-CA
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
0 s:/CN=*.<xyz>.local
i:/DC=local/DC=<xyz>/CN=<xyz>-hkgsubcorp-CA
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
1 s:/DC=local/DC=<xyz>/CN=<xyz>-root-CA
i:/DC=local/DC=<xyz>/CN=<xyz>-root-CA
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
2 s:/DC=local/DC=<xyz>/CN=<xyz>-hkgsubcorp-CA
i:/DC=local/DC=<xyz>/CN=<xyz>-root-CA
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=*.<xyz>.local
issuer=/DC=local/DC=<xyz>/CN=<xyz>-hkgsubcorp-CA
---
No client certificate CA names sent
Server Temp Key: ECDH, P-384, 384 bits
---
SSL handshake has read 4279 bytes and written 390 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: 1F6B...
Session-ID-ctx:
Master-Key: A92F...
Start Time: 1596603263
Timeout : 7200 (sec)
Verify return code: 19 (self signed certificate in certificate chain)
depth=2 DC = local, DC = <xyz>, CN = <xyz>-root-CA
verify error:num=19:self signed certificate in certificate chain
verify return:0
기존 인증서 퍼일하고 새 인증서 파일 열어서 안에 구조가 같은지 확인해 보시면 좋을것 같아요. 구글에 qualys ssl test 툴로 인증서가 어떻게 잘못됐는지 확인해 보시는것도 좋고요.
답글 주셔서 감사합니다. 그런데 이게 사내 서버라 qualys ssl test 사이트에서는 사용을 할 수가 없네요. 기존 인증서와 새 인증서는 openssl x509 -in ....crt -noout -text 명령어로 이미 비교해봤고 구조는 동일하고 serial number나 key identifier등만 다른 걸 확인했습니다.