croomのブログ

croomのメモ帳

Delphi7+Indy10でSSL通信

解決までにめちゃくちゃ時間かかったので、何かあったときのためにメモ書き。

前提:Win10 64bit Delphi7 Indy10.2.3 OpenSSLLibrary openssl-1.0.2u-i386-win32

IndyとOpenSSLの組み合わせを色々試したけどconnection errorだったりCould not load SSL Libraryだったりと出続けたんですが、ようやく通信に成功する組み合わせを見つけました。

それが前提の組み合わせです。

調べたところ、Delphi7だと10.2.3より後のIndyは使えない?らしく、10.2.3の中でもいくつかマイナーバージョンがあるようで。

Indy SVN:  https://svn.atozed.com:444/svn/Indy10/trunk

id:Indy-Public-RO

PW:空白

まずここから、SVNのリビジョン 4354をダウンロードします。

普通にURLにアクセスするだけでは駄目なのでSVNソフト等を使ってダウンロードするリビジョンを選択します。(私はtortoiseSVN使いました)

ダウンロードが終わったらこの中のCore、Protocol、Systemにパスを通して、それぞれのIndy〇〇70.dpkと、あるものはdclIndy〇〇70.dpkをそれぞれDelphi7で開いてコンパイルし、インストールします。この際、IndySystem70、IndyCore70、IndyProtocols70はインストール時に、オプションから設計時/実行時に設定変えないとエラー出ます。(なぜ出るのかは謎)

必要なコンポーネントが登録されればIndyのインストールは完了です。

(本来はSuperCoreも必要なはずなんですがうちの環境ではエラー出てそのままではインストールできず、修正も私には出来ず必要も無かったので放置しました。)

次にOpenSSLのダウンロードです。

openssl-1.0.2u-i386-win32.zip

を探してダウンロードし、解凍してください。

解凍したら【libeay32.dll】と【ssleay32.dll】を、実行ファイルがあるフォルダにコピーしてください。(C:\Windows\System32とかSysWoW64とかでもいいはずです。)

後はソースコードに以下を追加します。

uses節に

IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase, IdMessage,
IdSMTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdText,
IdHTTP, IdWebDAV

の中で足りないものを追加

フォームに

IdHTTP、IdSSLIOHandlerSocketOpenSSLを追加

IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvSSLv23;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmClient;

IdHTTP1.IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
IdHTTP1.HandleRedirects:=True;
というコードを追加すればSSL通信が問題なく出来るはずです。

私はこのコードをTFormのOnCreateイベントに入れました。

はっきり言って私もよくわかってないので質問は受け付けられません。

本当にメモ書きです。

それではそれでは。