2018/05/30

Delphi + Indy + OpenSSL で「SSL で接続する際にエラーが発生しました。プロトコルに違反する EOF が検出されました.」

Delphi + Indy+ OpenSSL 構成で SSL接続できなくなり「SSL で接続する際にエラーが発生しました。プロトコルに違反する EOF が検出されました.」というダイアログが出る


直接の原因は、サイト側(さくら)が TLS1.0/1.1 を無効にしたことで、Indy の TIdSSLIOHandlerSocketOpenSSL のプロパティをデフォルトから変更して TLS1.2以上で接続する必要があった
(とりあえず接続できるようになったけど、ちょっとモッサリな...)

IdHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
with IdHTTP.IOHandler do begin

    SSLOptions.SSLVersions := [sslvSSLv23]; // ←追加(無くても Methodを指定すると選択されます)

    // SSLOptions.Method := sslvTLSv1;
    SSLOptions.Method := sslvSSLv23; // ←変更

    SSLOptions.Mode := sslmUnassigned;
    SSLOptions.VerifyMode := [];
    SSLOptions.VerifyDepth := 0;
end;


「sslvSSLv23」て、SSLとして古いんじゃないの?と思ったが、ここに 変数名の付け方としておかしいとの話が載っていて、本来 sslvSSLBest であり、これを選択した場合  SSLv3, TLSv1, 1.1 or 1.2 とトライするのだとか~ それで遅いのかもね、ただ上記方法であれば 1.2の次が出たときも OpenSSL のアップデートのみで対応できるということになります
※私の修正したコードの Indy バージョンより新しいのは、直接 TLS1.2 とか指定できるかも

0 件のコメント: