
Quando tento usar o Curl no Windows para recuperar um https
URL, recebo o temido "erro de conexão (60)".
A mensagem de erro exata é:
curl: (60) Problema com certificado SSL, verifique se o certificado CA está OK. Detalhes:
erro:14090086:Rotinas SSL:SSL3_GET_SERVER_CERTIFICATE:falha na verificação do certificado
Mais detalhes aqui:http://curl.haxx.se/docs/sslcerts.html
Como resolver isso?
Responder1
Não sei por que, mas não encontrei essas informações em um só lugar.
Baixe a versão do Curl com reconhecimento de SSL ou crie você mesmo a versão com reconhecimento de SSL.
Dehttp://curl.haxx.se/docs/caextract.html, Baixe o arquivo cacert.pem.
Coloque o arquivo curl.exe e .pem no mesmo diretório.
Renomeie o
cacert.pem
arquivo paracurl-ca-bundle.crt
Execute novamente curl.exe!
EDITAR:
Existem outras maneiras de resolver o problema. esta forma específica depende de um cacert produzido pelo fabricante do Curl. Isso pode não ser o que você deseja e, em particular, pode não funcionar nos casos em que você tem uma autoridade de certificação menos conhecida (como uma autoridade conhecida apenas pela sua empresa) para o certificado usado pelo site SSL . Nesse caso, você desejará gerar seu próprio curl-ca-bundle.crt
arquivo. Você pode usar certreq.exe e openssl.exe para exportar esse certificado da loja IE/Windows e, em seguida, converter para o formato pem, respectivamente.
Responder2
Eu criei um script do PowerShell que é capaz de gravar o ca-cert.crt
arquivo com base nos certificados CA instalados em seu armazenamento de certificação do Windows (CurrentUser ou LocalMachine). Execute o script assim:
CreateCaCert.ps1 -StoreLocation CurrentUser | Out-File -Encoding utf8 curl-ca-cert.crt
Isso criará o curl-ca-cert.crt
arquivo que deve ser armazenado no mesmo diretório curl.exe
e você poderá validar os mesmos sites que em seus aplicativos do Windows (observe que esse arquivo também pode ser consumido por git
).
O script "oficial" pode ser encontrado emGitHub, mas a versão inicial está listada aqui para referência:
[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]::Root, $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-----"
}
Responder3
Na verdade, tivemos o mesmo problema com Typheous/Ruby. A solução foi baixar ocacert.peme salve-o em C:\Windows\System32 (ou onde quer que esteja o seu Windows). Depois disso, definimos uma variável de ambiente globalcomo descrito aquionde deve estar o "Nome da Variável" CURL_CA_BUNDLE
e o "Valor da Variável" o caminho para o arquivo %SystemRoot%\System32\cacert.pem
.
Ao iniciar uma nova sessão CMD, agora você pode simplesmente usar o Typheous/Libcurl para autenticar conexões SSL. Eu tentei isso com sucesso com o Windows 8.1.