Problem

curl은 커맨드 라인을 통해 URL을 통해 데이터를 전송하고 수신할 수 있는 인터넷 프로토콜 전송 유틸리티입니다. 주로 터미널에서 실행되며, HTTP, HTTPS, FTP, SMTP 등 다양한 프로토콜을 지원하며, 다양한 기능을 갖추고 있습니다.

curl 명령을 사용하면 HTTP 요청을 보내고, 웹 서버의 응답을 받을 수 있습니다. 주로 API 요청이나 서버의 응답을 디버깅할 때 유용합니다. 예를 들어, curl 명령을 사용하면 웹 페이지의 내용을 다운로드하거나, 파일을 업로드하거나, HTTP 헤더를 검사하거나, REST API 요청을 테스트할 수 있습니다.

curl 명령을 사용할 때 다양한 옵션을 설정할 수 있습니다. 예를 들어, -v 옵션을 사용하면 요청 및 응답 헤더를 자세히 볼 수 있으며, -o 옵션을 사용하면 파일 다운로드를 지정된 이름으로 저장할 수 있습니다. --data나 -d 옵션을 사용하면 POST 요청을 보낼 수 있으며, --header-H 옵션을 사용하면 HTTP 헤더를 설정할 수 있습니다.

즉, curl은 다양한 목적으로 사용할 수 있는 강력한 인터넷 프로토콜 전송 유틸리티입니다.

문제 현상

# curl https://YOUR_URL --tlsv1.3 -v -L

* About to connect() to YOUR_URL port 443 (#0)
*   Trying ::1...
* Connected to YOUR_URL (::1) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -12286 (SSL_ERROR_NO_CYPHER_OVERLAP)
* Cannot communicate securely with peer: no common encryption algorithm(s).
* Closing connection 0
curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).
  • 연결을 시도합니다 YOUR_URL 포트 443 (#0)
  • ::1 에 연결을 시도합니다…
  • YOUR_URL (::1) 포트 443 에 연결했습니다 (#0)
  • certpath: sql:/etc/pki/nssdb 로 NSS를 초기화합니다.
  • CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: 없음
  • NSS 오류 -12286 (SSL_ERROR_NO_CYPHER_OVERLAP)
  • 안전한 연결을 협상할 수 없습니다: 공통 암호화 알고리즘이 없습니다.
  • 연결을 닫습니다 0 curl: (35) 안전한 연결을 협상할 수 없습니다: 공통 암호화 알고리즘이 없습니다.

위 오류 메시지는 curl을 사용하여 YOUR_URL의 443번 포트로 연결을 시도했으나, 서버와 클라이언트 간의 공통된 암호화 알고리즘이 없기 때문에 안전한 연결을 협상할 수 없다는 것을 나타냅니다. 이러한 오류는 대개 서버 및 클라이언트 구성 불일치로 인해 발생합니다.

문제 발생 curl 버전

# curl --version

curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.53.1 zlib/1.2.7 libidn/1.28 libssh2/1.8.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets

문제 없는 curl 버전

# curl --version

curl 7.79.1 (Windows) libcurl/7.79.1 Schannel
Release-Date: 2021-09-22
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS HSTS IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI UnixSockets

Solution

이 문제는 클라이언트와 서버 간의 SSL/TLS 연결을 협상할 수 있는 암호화 알고리즘이 없어 발생하는 오류입니다. 이러한 오류는 대개 클라이언트 또는 서버 구성의 문제로 인해 발생합니다.

내 경우에는 오래된 NSS 라이브러리 사용1으로 인한 오류 였으며, 해당 라이브러리 업데이트를 제안해서 해결되었습니다.

  • NSS 라이브러리 업데이트: 클라이언트에서 사용하는 NSS 라이브러리 버전이 오래되거나 지원되지 않는 경우 이러한 오류가 발생할 수 있습니다. NSS 라이브러리를 업데이트하여 오류를 해결할 수 있습니다.

  • TLS 버전 업데이트: 클라이언트에서 사용하는 TLS 버전이 서버에서 지원하는 버전과 일치하지 않는 경우 이러한 오류가 발생할 수 있습니다. TLS 버전을 업데이트하여 오류를 해결할 수 있습니다.

  • 암호화 알고리즘 업데이트: 클라이언트와 서버 간에 사용 가능한 암호화 알고리즘이 일치하지 않는 경우 이러한 오류가 발생할 수 있습니다. 서버 측에서 암호화 알고리즘을 업데이트하거나, 클라이언트에서 다른 암호화 알고리즘을 사용하도록 구성하여 해결할 수 있습니다.

  • 보안 소프트웨어 비활성화: 때로는 보안 소프트웨어가 SSL/TLS 연결을 차단할 수 있습니다. 이 경우 보안 소프트웨어를 비활성화하거나 예외 규칙을 추가하여 해결할 수 있습니다.

  • 방화벽 구성 변경: 일부 방화벽은 SSL/TLS 연결을 차단할 수 있습니다. 방화벽 구성을 변경하여 SSL/TLS 연결이 차단되지 않도록 해결할 수 있습니다.

  • 서버 구성 변경: 일부 서버 구성이 SSL/TLS 연결에 대한 암호화 알고리즘을 차단할 수 있습니다. 서버 구성을 변경하여 암호화 알고리즘을 지원하도록 설정하여 해결할 수 있습니다.

References