web-dev-qa-db-ja.com

Schannelがサーバーからハンドシェイクを受信できないのはなぜですか?

私のgitサーバーからプルしようとすると、次のエラーが発生します。

致命的: 'xxx'にアクセスできません:OpenSSL SSL_connect:xxxへの接続でSSL_ERROR_SYSCALL

これが発生する前に、システムを復元するだけで解決できましたが、今回は何らかの理由でシステムの復元ポイントが削除されてしまい、それもできません。

これは、SSLに関連するシステム設定の一部が変更されたために発生します。理由はわかりません。

私はgitをインストールしてWindows証明書を使用しようとしました。 OpenSSLの代わりに保存すると、次のエラーが発生します。

致命的: 'xxx'にアクセスできません:schannel:ハンドシェイクの受信に失敗しました、SSL/TLS接続に失敗しました

同じ問題、異なるエラーメッセージ。サーバーはクライアントhelloの後にhelloメッセージを送り返していません。これは、クライアントのhelloメッセージでサーバーに送信する暗号スイートがサーバーでサポートされていないために発生する可能性があると考えました。したがって、私は グループポリシーの構成 を試して、サーバーが最初に使用している暗号スイートを順番に配置しました。しかし、違いはありませんでした。

ブラウザを介してgitサーバーのサイトに接続できます。だから私の質問は、この問題を解決するにはどうすればよいですか?

6
Selman Genç

私の場合、.gitconfigを

[http] sslbackend = schannel

[http] sslbackend = openssl
3
James

テストのために Git for Windows release 2.14.2(June 21th、2018) を使用して再試行する必要があります。これにより、ssl backenhttp.sslCAinfoschannel`の場合にis set toを強制的に無視するコードが追加されます(Windows証明書がストアは無視されません)。
これは、cURL v7.60.0(またはそれ以降)で実行する場合にのみ関連します。

commit c5ad43e を参照してください:

http:セキュアチャネルを使用する場合、デフォルトでsslCAInfoを無視します

CURL v7.60.0以降、セキュアチャネルバックエンドはhttp.sslCAInfoを介して提供される証明書バンドルを使用できますが、これによりWindows証明書ストアが上書きされます。これはデフォルトでは望ましくないので、schannelがこの動作をオーバーライドしない限り、useSSLCAInfoバックエンドがhttp.sslBackendを介して構成されたときに、デフォルトでそのバンドルを使用するようにcURLに要求しないようにGitに指示しましょう。

1
VonC

同じ問題(Windows 10)があり、再起動すると問題が解決しました。

0
TheLogicMan

「弱い」解決策の1つは、GIT_SSL_NO_VERIFY

export GIT_SSL_NO_VERIFY=true

または、Windowsでは、コマンドラインバージョンのGitを使用している場合は、システムまたはコマンドラインで環境変数を設定します。

set GIT_SSL_NO_VERIFY=true

それは単にそれが言うことをします...

0
Fabien Bouleau