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
연결에 대한 암호화 알고리즘을 차단할 수 있습니다. 서버 구성을 변경하여 암호화 알고리즘을 지원하도록 설정하여 해결할 수 있습니다.