[Delphi] Indyのエラー関連
トップページへ
ご参考の際は自己責任でお願いします。また、提示した解決法はあくまでも一例なので、必ず解決できるとは限りません。
※画像は一部を除きタップ(クリック)で拡大します。
Q. 例外クラス
EIdIOHandlerPropInvalid (メッセージ ‘IOHandler value is not valid’)を送出しました。
A. IOHandlerプロパティが空欄の時に出ることがあります。
フォーム上にIdSSLIOHandlerSocketOpenSSLコンポーネントを配置し、それを指定することで回避できる場合があります。
Q. IdSSLIOHandlerSocketOpenSSLコンポーネントでエラーになる。あるいは、プログラムを開発したマシンならエラーにならないが、他のマシンで実行するとエラーになった場合。
実行例 Methodプロパティが
「sslvSSLv2」の時
例外クラス
EIdOSSLConnectError (メッセージ ‘Error connetcting with SSL.
error:00000006:lib(0):func(0):EVP lib’)を送出しました。
「sslvSSLv23」の時
例外クラス
EIdOSSLUnderlyingCryptoError (メッセージ ‘Error connetcting with SSL.
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version’)を送出しました。
「sslvSSLv3」の時
例外クラス
EIdOSSLUnderlyingCryptoError (メッセージ ‘Error connetcting with SSL.
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure’)を送出しました。
「sslvTLSv1」「sslvTLSv1_1」「sslvTLSv1_2」の時
例外クラス
EIdOSSLUnderlyingCryptoError (メッセージ ‘Error connetcting with SSL.
error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version’)を送出しました。
2022/10/22追記
Methodプロパティとは関係なく、同じWindows10のマシンが2台で「開発したマシンでは正常、他のマシンではエラー」といった事例がありましたが、同じ方法で解決しました。
A. Embarcadero のサイトを参考に、開発用プラットフォーム向けの最新の OpenSSL アーカイブをダウンロードし、その中から次の2つのライブラリファイルを「自分のアプリケーションと同じフォルダにコピー」します。
libeay32.dll
ssleay32.dll
コピー後にプログラムの再コンパイルは不要と思われ、「同じフォルダに置くだけ」で動作します(あくまでも当方の見解です)
2022/10/22追記
OpenSSLの64bit用をダウンロードして
libeay32.dll
ssleay32.dll
を自作PGと同じフォルダに置いたものの再度エラーとなったので、今度はOpenSSLの32bit用をダウンロードして2つのdllを同じフォルダに置いたら、エラーが出ませんでした。
OSは64bitなのですが、自作PGが32bitだったからかもしれません。
それでも上記のエラーが出る場合は
接続するサーバー(サイト)によってSSLのプロトコルが異なるため、「Methodプロパティの変更」を検討してみて下さい。
私の接続先サイトの場合、
sslvSSLv23
sslvTLSv1_2
の2つのみ正常で、それ以外ではエラーでした。
あくまでも一例です。
他の方の関連記事
Delphi(楽天市場で探す ・ amazonで探す)でHttps TSLページを開けない – Indyエラー
リンク切れ
DelphiでIndyのGitHubAPIを使用する
https://www.javaer101.com/ja/article/47255513.html