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

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


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

  1. IdHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);  
  2. with IdHTTP.IOHandler do begin  
  3.   
  4.     SSLOptions.SSLVersions := [sslvSSLv23]; // ←追加(無くても Methodを指定すると選択されます)  
  5.   
  6.     // SSLOptions.Method := sslvTLSv1;  
  7.     SSLOptions.Method := sslvSSLv23; // ←変更  
  8.   
  9.     SSLOptions.Mode := sslmUnassigned;  
  10.     SSLOptions.VerifyMode := [];  
  11.     SSLOptions.VerifyDepth := 0;  
  12. end;  


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

コメント