SSLで接続エラー

解決


Hoby  2022-10-03 16:24:31  No: 150569  IP: 192.*.*.*

IdHTTPを使用してHTML内のTITLEの抽出をしたいと思って
抽出は出来ているのですが、

特定のURLにアクセスをすると以下のようなエラーが出ます。
特定のURL→https://www.javadrive.jp/php/sample/keijiban/index4.html

エラー
SSLで接続する際にエラーが発生しました。
erro:140944E:SSL routines:SSL3_READ_BYTESsv1 alert Protocol version

以下ソースコード
var
 ///Title取得変数
  s: String;
  mm: TMatch;
  i: Integer;
begin
    ///Title抽出してForm.captionに表示
    s := IdHTTP1.Get(ComboBox1.text);  //Edit1のアドレスからページを取得
    mm := TRegex.Match(s, '<title>(.*)</title>'); //正規表現の判定
    //取得が成功したか?
    if mm.success then
      begin
          //成功したら正規表現グループの1からタイトルを取得
          Form1.Caption := mm.Groups[1].Value;
     end
     else
           begin
          //成功しなかったら
          Form1.Caption := 'AppTitle';
            end;
end;

ググっても情報がなく困っています。ご教示よろしくお願い致します。

編集 削除
take  2022-10-03 23:20:49  No: 150570  IP: 192.*.*.*

ググッたら Mr.XRAYさんのサイトが出てきました
http://mrxray.on.coocan.jp/Delphi/plSamples/772_Indy_HTTPGet.htm#07


IOHandlerに参照させるTIdSSLIOHandlerSocketOpenSSLクラスのSSLOptins.Methodを別の暗号化方式にすると通るかも
他に考えられるのは ssleay32.dllをか暗号化に使ってるDLLが最新版ではないとか?

編集 削除
mam  2022-10-04 00:11:21  No: 150571  IP: 192.*.*.*

take様の補足ですが、

TIdSSLIOHandlerSocketOpenSSL
をフォームにドロップ&ドロップして、

以下のように設定すればいいのでは?
    IdHTTP1.IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:=TIdSSLVersion.sslvTLSv1_2;

編集 削除
Hoby  2022-10-04 04:59:15  No: 150572  IP: 192.*.*.*

takaさん、mamさん アドバイスありがとうございます。

takaさんの

TIdSSLIOHandlerSocketOpenSSL コンポーネントを配置
TIdHTTP コンポの IOHandler プロパティの値をTIdSSLIOHandlerSocketOpenSSL としSSLOptins.Method の値を 「sslvSSLv23」 に設定してみましたが、
以下のようなSSL接続エラーが出ました。

 SSL接続エラーが発生しました。
 error:1407742E;SSL routines:SSL23_GET_SERVER_HELLO:tlsv1


mamさんの

 SSLOptins.Method の値を TIdSSLVersion.sslvTLSv1_2に変更してみましたが
今度は、当初と同じSSLエラーが出るようです。

 error:1409442E;SSL routines:SSL3_READ_BYTES_:tlsv1

次に
openssl-0.9.8r-i386-win32-rev2.zip  2017-04-02 04:08 831Kがなかったので
openssl-1.0.2u-i386-win32.zip   をダウンロードして
 libeay32.dll と ssleay32.dll という 2 つの DLL をプログラムの実行ファイルがあるフォルダにコピーしましたが、今度は

起動時とURL検索後の2回
インデックスが範囲外です(1)とエラーが出ました。
ただ、SSLエラーは出ていないようなので、解決していそうな気がするのですが、、
Form1.Captionの手前で止まっているようです。

何が原因なのでしょうか?


編集 削除
hoby  2022-10-04 05:07:26  No: 150573  IP: 192.*.*.*

>起動時とURL検索後の2回
>インデックスが範囲外です(1)とエラーが出ました。
>ただ、SSLエラーは出ていないようなので、解決していそうな気がするのですが、、
何かの拍子にIf分内の変数をいじってしまっていたので、それを修正し、
takaさん、mamさんのアドバイス通りしましたらSSLエラーは出なくなりました。
アドバイス下さりありがとうございました。

編集 削除