Delphi + Indy + OpenSSL で「SSL で接続する際にエラーが発生しました。プロトコルに違反する EOF が検出されました.」
Delphi + Indy+ OpenSSL 構成で SSL接続できなくなり「SSL で接続する際にエラーが発生しました。プロトコルに違反する EOF が検出されました.」というダイアログが出る
直接の原因は、サイト側(さくら)が TLS1.0/1.1 を無効にしたことで、Indy の TIdSSLIOHandlerSocketOpenSSL のプロパティをデフォルトから変更して TLS1.2以上で接続する必要があった
(とりあえず接続できるようになったけど、ちょっとモッサリな...)
で
「sslvSSLv23」て、SSLとして古いんじゃないの?と思ったが、ここに 変数名の付け方としておかしいとの話が載っていて、本来 sslvSSLBest であり、これを選択した場合 SSLv3, TLSv1, 1.1 or 1.2 とトライするのだとか~ それで遅いのかもね、ただ上記方法であれば 1.2の次が出たときも OpenSSL のアップデートのみで対応できるということになります
※私の修正したコードの Indy バージョンより新しいのは、直接 TLS1.2 とか指定できるかも
直接の原因は、サイト側(さくら)が 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 とか指定できるかも
コメント