왜 컬이 Windows에서 인증서를 제대로 확인할 수 없습니까?


30

Windows에서 Curl을 사용하여 httpsURL 을 검색하려고하면 "연결 오류 (60)"가 두려워집니다.

enter image description here

정확한 오류 메시지는 다음과 같습니다.

curl : (60) SSL 인증서 문제, CA 인증서가 정상인지 확인하십시오. 세부 사항 :
오류 : 14090086 : SSL 루틴 : SSL3_GET_SERVER_CERTIFICATE : 인증서 확인 실패
자세한 내용은 여기 : http://curl.haxx.se/docs/sslcerts.html

이 문제를 해결하는 방법?


SU는 제목에 "문제"라는 단어가 마음에 들지 않기 때문에 좋아하지 않습니다. "문제"라는 단어없이 제목을 다시 입력 할 수있는 방법을 찾지 못하면 충분히 노력하지 않는 것입니다. :)
개렛

1
내가 묻는 메시지의 정확한 인용문입니다. 검색 인덱싱에 중요한 단어 인 단어를 삭제하고 싶지 않습니다.
Cheeso

@Cheeso : 게시물 내용도 색인화되므로 질문을 검색하는 사람이 제목 아래의 설명에서이를 볼 수 있습니다.
Tamara Wijsman

답변:


36

이유를 모르겠지만이 정보를 한 곳에서 찾지 못했습니다.

  1. SSL 인식 버전의 Curl을 다운로드하거나 SSL 인식 버전을 직접 빌드하십시오.

  2. 에서 http://curl.haxx.se/docs/caextract.html 의 cacert.pem 파일을 다운로드합니다.

  3. curl.exe 및 .pem 파일을 동일한 디렉토리에 배치하십시오.

  4. cacert.pem파일 이름 을curl-ca-bundle.crt

  5. curl.exe를 다시 실행하십시오!


편집하다:

문제를 해결하는 다른 방법이 있습니다. 이 특정 방식은 Curl 제조업체가 생산 한 cacert에 의존합니다. SSL 사이트에서 사용하는 인증서에 대해 잘 알려지지 않은 인증 기관 (예 : 회사에만 알려진 기관)이있는 경우에는 그렇지 않을 수 있습니다. . 이 경우 자신의 curl-ca-bundle.crt파일 을 생성하려고 합니다. certreq.exe 및 openssl.exe를 사용하여 해당 인증서를 IE / Windows 저장소에서 내 보낸 다음 각각 pe- 형식으로 변환 할 수 있습니다.


1
고맙습니다!!! 최근에 HTTPS를 줄이려고 시도하고 작동하는 방법을 알아 내려고 많은 시간을 보냈습니다. 당신과 마찬가지로, 나는 정보를 얻기 위해 다양한 소스를 확인해야했지만 불행히도 cURL 사이트에서 인증서 파일을 다운로드해야한다는 부분을 찾지 못했습니다 (대상 사이트에서 인증서를 다운로드하는 것에 대한 많은 것을 보았습니다. 그러나 이것은 아닙니다).
Synetech 2016 년

도움이되어 다행입니다.
Cheeso

curl-ca-bundle.crt로 이름을 바꾸는 요점은 무엇입니까? 윈도우에만 적용됩니까?
nawfal

감사! Windows 7에 curl표시된 것을 사용하고있었습니다 WinSSL. 설명서 링크에 따르면 표시된 버전은 시스템 인증서를 사용하여 작동해야합니다. 그러나 솔루션을 따를 때까지 오류가 발생했습니다.
George

그러나 최종 사용자에게 관리자 장비가 없으면 시스템에 속한 폴더에 새 인증서를 넣을 수 없습니다. 또는 사용자가 환경 변수를 사용할 수 있습니다 set CURL_CA_BUNDLE=<path to crt>. 파일 형식이 올바른지 확인하십시오. 이 방법은 curlgit, vagrant 등과 같은 여러 설치 가 있어도 작동 합니다.
Aaron C

6

ca-cert.crtWindows 인증 저장소 (CurrentUser 또는 LocalMachine)에 설치된 CA 인증서를 기반으로 파일 을 작성할 수있는 PowerShell 스크립트를 만들었습니다 . 다음과 같이 스크립트를 실행하십시오.

CreateCaCert.ps1 -StoreLocation CurrentUser | Out-File -Encoding utf8 curl-ca-cert.crt

그러면 curl-ca-cert.crt동일한 디렉토리에 저장해야하는 파일 이 생성되고 curl.exeWindows 응용 프로그램에서와 동일한 사이트를 확인할 수 있어야합니다 (이 파일은을 (를 git) 사용할 수도 있습니다 ).

"공식"스크립트는 GitHub 에서 찾을 수 있지만 초기 버전은 다음과 같습니다.

[CmdletBinding()]
Param(
    [ValidateSet(
        [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser,
        [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine)]
    [string]
    $StoreLocation = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser
)

$maxLineLength = 77

# Open the store
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store ([System.Security.Cryptography.X509Certificates.StoreName]::AuthRoot, $StoreLocation)
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadOnly);

# Write header
Write-Output "# Root certificates ($StoreLocation) generated at $(Get-Date)"

# Write all certificates
Foreach ($certificate in $store.Certificates)
{
    # Start with an empty line
    Write-Output ""

    # Convert the certificate to a BASE64 encoded string
    $certString = [Convert]::ToBase64String($certificate.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert));

    # Write the actual certificate
    Write-Output "# Friendly name: $($certificate.FriendlyName)"
    Write-Output "# Issuer:        $($certificate.Issuer)"
    Write-Output "# Expiration:    $($certificate.GetExpirationDateString())"
    Write-Output "# Serial:        $($certificate.SerialNumber)"
    Write-Output "# Thumbprint:    $($certificate.Thumbprint)"
    Write-Output "-----BEGIN CERTIFICATE-----"
    For ($i = 0; $i -lt $certString.Length; $i += $maxLineLength)
    {
        Write-Output $certString.Substring($i, [Math]::Min($maxLineLength, $certString.Length - $i))
    }
    Write-Output "-----END CERTIFICATE-----"
}

2

실제로 우리는 Typheous / Ruby와 같은 문제가있었습니다. 솔루션이 cacert.pem 을 다운로드하여 C : \ Windows \ System32 (또는 Windows가있는 곳)에 저장했습니다. 그 후 "Variable Name"이 있어야 하고 "Variable Value"가 파일에 대한 경로 인 여기에 설명 된 것과 같은 전역 환경 변수를 설정 CURL_CA_BUNDLE합니다 %SystemRoot%\System32\cacert.pem.

새로운 CMD 세션을 시작할 때 이제 Typheous / Libcurl을 사용하여 SSL 연결을 인증 할 수 있습니다. Windows 8.1 에서이 작업을 성공적으로 시도했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.