cURLがWindowsで証明書を適切に検証できないのはなぜですか?


30

WindowsでCurlを使用してhttpsURL を取得しようとすると、恐ろしい「接続エラー(60)」が表示されます。

ここに画像の説明を入力してください

正確なエラーメッセージは次のとおりです。

curl:(60)SSL証明書の問題。CA証明書に問題がないことを確認してください。詳細:
エラー:14090086:SSLルーチン:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
詳細はこちら:http ://curl.haxx.se/docs/sslcerts.html

これを解決するには?


SUは、説明に含まれていないため、タイトルの「問題」という言葉を好まない。「問題」という言葉がないとタイトルを言い換える方法がわからない場合は、十分な努力をしていません。:)
ギャレット

1
それは私が尋ねているメッセージの正確な引用です。私はその単語を削除しようとはしたくない、それは検索インデックスのために重要なものだ。
-Cheeso

@Cheeso:投稿のコンテンツにもインデックスが付けられ、あなたの質問を検索する人はタイトルの下の説明にそれを見るでしょう。
タマラWijsman

回答:


36

理由はわかりませんが、この情報をすべて1か所で見つけることはできませんでした。

  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のメーカーが作成した証明書に依存しています。それはあなたが望むものではないかもしれません。特に、SSLサイトで使用されている証明書についてあまり知られていない認証機関(会社だけが知っている機関など)がある場合にはうまくいかないかもしれません。 。その場合、独自のcurl-ca-bundle.crtファイルを生成する必要があります。certreq.exeとopenssl.exeを使用して、そのような証明書をIE / Windowsストアからエクスポートし、それぞれに変換してPEM形式にできます。


1
ありがとうございました!!!私は最近HTTPSをcURLにしようとしましたが、HTTPSを機能させる方法を見つけようとかなりの時間を費やしました。あなたと同様に、私もさまざまな情報源で情報を確認する必要がありましたが、残念ながら、cURLサイトから証明書ファイルをダウンロードする必要があるという部分は見つかりませんでした(ターゲットサイトから証明書をダウンロードすることについて、これではありません)。
Synetech

喜んでくれました。
-Cheeso

名前をcurl-ca-bundle.crtに変更する意味は何ですか?Windows固有ですか?
-nawfal

ありがとう!私はWindows 7でcurlマークWinSSLを使用していました。ドキュメントリンクによると、そのようにマークされたバージョンはシステムの証明書を使用するだけで機能するはずです。ただし、解決策に従うまでエラーが表示されていました。
ジョージ

ただし、エンドユーザーに管理者権限がない場合、システムに属するフォルダーに新しい証明書を配置できません。または、ユーザーは環境変数を使用できますset CURL_CA_BUNDLE=<path to crt>。ファイルの形式が適切であることを確認してください。この方法では、複数持っている場合でも動作しますcurlインストール、例えばgitの、浮浪者...
アーロン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のある場所)に保存していました。その後、ここで説明したようなグローバル環境変数を設定します。ここで、「変数名」CURL_CA_BUNDLEはファイルへのパス、「変数値」はパスである必要があります%SystemRoot%\System32\cacert.pem

新しいCMDセッションを開始するときに、Typheous / Libcurlを使用してSSL接続を認証できるようになりました。Windows 8.1でこれを試してみました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.