もう随分前になるのですが、d割と便利なので未だに使用しているdelhiで作成した自分用のツールがあるのですが、Webから情報を引っ張っているところで、データが取得できない場合があることに気づきました。実は、以前にもそういうことがあって、その時は、Webデータを取得しているIndyのhttp ClientがSSLに対応していなかったので、httpsで始まるアドレスのデータが取得出来ていませんでした。このときは、SSLのオープンソースで有名なOpensslを連携させることでSSL対応のデータを取得できるようにしました。SSLについては対応済みだったので、SSL以外に何かあるのかと原因を探ってみたのですが、またSSL関連で問題が発生していることが判明しました。
最近、GoogleがSSL対応を主導しているみたいですよね。それに伴って、https化が流行っているらしく、今までhttpで取得できていたところが、https対応されて取得できなくなったWebサイトが出てきたわけです。いろいろ見ていくと、ぼくが、SSL対応したころに比べるとセキュリティ強化されたTLSがリリースされていて(逆に言うと古いものには問題がいろいろあるらしい)、最近SSL対応したサイトは、新しいTLSに対応しているところが多いみたいです。ぼくが対応したときは、TLS 1.0しか対応していなかったためにTLS1.1,1.2に対応しているサイトの情報が取れなかったということが判明しました。ということで、TLS1.1,1.2に対応すればいいということはわかったのですが、これが意外と手強かったです。
Opensslのほうは、最新版を入手すれば対応していると思ったので、こちらについては、特に苦労はせず、こちらから1.0.2oをダウンロードしてライブラリを入手しました。ぼくの用途では、Indyからライブラリをコールすることが出来れば問題ないのでOpensslのインストーラーは使用せずライブラリを最新のものに入れ替えました。このとき、注意しなければいけないのが、ビルドするときに、64bitか32bitかで、対応するライブラリが違うということです。64bitも32bitもライブラリのファイル名は同じなので対応するライブラリと組み合わせないと、当たり前ですが、いくらやってもデータは取得出来ません。(実は、ぼくは1回それでかなり悩んだことがあります)。
時間がかかったのは、Indyの対応でした。これも、最新を落としてdelphiにインストールすれば使えるだろうと思っていたのですが、ホームページでダウンロードできる最新ものを引っ張ってきても、中を見ると、TLS1.0までしか対応されていませんでした。OpensslのほうはTLS1.2まで対応しているので、自力で改造することも最初考えたのですが、情報収集していると、ぼくが落としてきたものより新しいVersionのIndyがあって、それはTLS1.2まで対応していそうだということがわかってきました。それでさらにいろいろ調べたところ、Indyは、構成管理ツールであるSVNを使ってバージョン管理をするようになり、SVNでないと最新版を入手出来なくなっていることがわかりました。
SVNはすでにインストールしていたので、下記からチェックアウトして入手しました。
リポジトリ https://svn.atozed.com:444/svn/Indy10/
アカウント Indy-Public-RO
パスワード なし
ぼくが以前使用していたバージョンだと、Core、Protocols、Systemの3フォルダしかなかったのですが、今はいろいろ増えているみたいでした。ですが、取りあえず以前と同じ手順で順番に必要なパッケージをインストールしたところ、無事動作させることができました。
最近は優秀な構成管理ツールがあるので、Gitなんかで公開されていることが多いということは、頭でわかっていたのですが・・・昔一度インストールした経験があったので、同じやり方でいいと思い込んでいたのではまってしまいました。delphiなんて、もう使っている人はいないかも知れませんが(ぼくも乗り換えたいと思い始めている・・・)、何かのお役に立てばということでメモしておきます。