자체 서명된 SSL 인증서를 사용하여 개발 사이트를 실행하는 로컬 개발 서버 중 하나에 컬 요청을 보내려고 합니다. 명령줄에서 컬을 사용하고 있습니다.
일부 블로그 게시물에서 인증서 목록에 추가하거나 특정(자체 서명) 인증서를 유효하게 지정할 수 있다고 언급하는 것을 보았습니다. 하지만 SSL 인증서를 "확인하지 않음"을 의미하는 일반적인 방법이 있습니까? --no-check-certificate
wget 과 같은 것입니다. 가지다?
답변1
예. ~에서맨페이지:
-k, --안전하지 않음
(TLS) 기본적으로 컬에 의해 설정된 모든 SSL 연결은 안전한 것으로 확인됩니다. 이 옵션을 사용하면 안전하지 않은 것으로 간주되는 다른 서버 연결에 대해서도 컬이 진행되고 작동할 수 있습니다.
서버 인증서에 올바른 이름이 포함되어 있는지 확인하고 인증서 저장소를 사용하여 유효성을 성공적으로 확인하여 서버 연결을 확인하세요.
자세한 내용은 다음 온라인 리소스를 참조하세요. https://curl.haxx.se/docs/sslcerts.html
--proxy-insecure 및 --cacert도 참조하세요.
이것인용하다이 매뉴얼 페이지 항목에 언급된 설명은 에 대해 설명합니다 -k
.
이러한 동작은 curl
페이지의 요청을 테스트하여 관찰 할 수 있습니다.BadSSL.com
curl -X GET https://wrong.host.badssl.com/
curl: (51) SSL: no alternative certificate subject name matches target host name 'wrong.host.badssl.com'
curl -k -X GET https://wrong.host.badssl.com/
..returns HTML content...
답변2
다음 명령을 사용하여 모든 연결에 변경 사항을 적용할 수 있습니다.
$ echo insecure >> ~/.curlrc
Windows에서는 , 또는 디렉토리에 _curlrc
"안전하지 않은" 텍스트가 포함된 텍스트 파일을 생성하세요 .%HOME%
%CURL_HOME%
%APPDATA%
%USERPROFILE%
%USERPROFILE%\Application Data
위 솔루션을 사용하면 모든 명령에 대해 작동한다는 이점이 있지만 curl
도입될 수 있으므로 권장되지 않습니다.중간자 공격안전하지 않고 신뢰할 수 없는 호스트에 연결합니다.
답변3
자체 서명된 인증서를 사용하고 있습니다. CA를 신뢰할 수 있는 CA 번들(Linux)에 연결하거나 신뢰할 수 있는 인증서 저장소(Windows)에 추가하면 어떨까요? 또는 --cacert /Path/to/file
신뢰할 수 있는 자체 서명 인증서 파일의 내용을 사용하세요.
다른 답변은 모두 wget
비교 가능성을 기반으로 질문에 답합니다. 하지만 실제 질문은 어떻게 사용하느냐 입니다 curl
. 많은 의견에 따르면 이러한 답변 중 보안이 가장 중요한 질문이며 가장 좋은 답변은 자체 서명된 인증서를 신뢰하고 curl
보안 검사를 그대로 유지하는 것입니다.
답변4
에 추가하다사용자 3258557대답은 자신의 루트 CA 등을 사용하여 자신의 일부 가짜 서버를 테스트해야 한다고 가정합니다.컬의 옵션을 사용하고 싶지 않습니다 -k
.
먼저 루트 CA에 대한 RSA 키를 생성해 보겠습니다.
openssl genrsa -des3 -out rootCA.key 4096
그런 다음 해당 키를 사용하여 자체 CA에 대한 인증서에 서명합니다.
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
이제 개인 키와 인증서가 있는 루트 CA가 생겼습니다.
이제 우리 웹사이트에 대한 키와 인증서를 생성해 보겠습니다.
openssl genrsa -out mainsite.net.key 2048
이제 인증서를 만들기 전에 먼저 인증서 서명 요청(CSR)이 필요합니다. 그런 다음 루트 CA는 CSR에 "서명"하고 웹 사이트에 대한 인증서를 생성합니다.
openssl req -new -key mainsite.net.key -out mainsite.net.csr
마지막으로 웹사이트에 대한 인증서를 만들어 보겠습니다.
openssl x509 -req -in mainsite.net.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out mainsite.net.crt -days 500 -sha256
사용 편의성을 위해 및 파일을 .pem
사용하여 파일을 생성 해 보겠습니다..crt
.key
cat mainsite.net.key mainsite.net.crt > mainsite.net.pem
이제 이 파일을 사용하여 간단한 서버를 실행할 수 있습니다 .pem
. 서버가 다음에서 실행 중이라고 가정합니다.127.0.0.1:12345
컬 요청의 경우 다음을 수행할 수 있습니다.
curl --cacert "rootCA.crt" https://127.0.0.1:12345/
한 단계 더 나아가 SNI를 사용하여 단일 포트에서 여러 사이트를 호스팅하려면 각 사이트에 대한 키를 생성하고 CSR에 서명한 후 다음과 같이 컬 요청을 사용할 수 있습니다.
curl --resolve subsite1.mainsite.net:12345:127.0.0.1 -X GET --cacert "rootCA.crt" --cert "subsite1.mainsite.net.crt" --key "subsite1.mainsite.net.key" https://subsite1.mainsite.net:12345/