【入門編】【明示的TLS 1.2/1.3通信】WinHttp.WinHttpRequest.5.1 の SecureProtocols 設定による安全なWeb API接続 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptで現代のWeb APIを叩く!WinHttpRequestの「TLS 1.2/1.3」強制接続術

こんにちは。レガシーな環境を愛し、かつ最新のセキュリティ技術でそれを包み込むことを信条とするエンジニアです。

VBScriptは「古い言語」と言われがちですが、Windows環境におけるその即効性と軽快さは、今なお最強の武器です。しかし、現代のWeb APIはSSL/TLS通信のセキュリティ要件が厳しくなっており、デフォルト設定のままでは「接続エラー(0x80072F7D)」で弾かれることが増えています。

今回は、VBScriptでHTTPS通信を行う際の最大の壁、「プロトコルの不一致」を突破し、安全かつ確実にTLS 1.2/1.3で接続する方法を伝授します。

なぜデフォルトのHTTPS通信は失敗するのか?

VBScriptでWeb通信を行う際に最もよく使われる `WinHttp.WinHttpRequest.5.1` オブジェクト。実はこれ、OSのバージョンによっては、デフォルトで古いSSL/TLSプロトコル(SSL 3.0やTLS 1.0)を優先しようとします。

現代のサーバー側は「古いプロトコルでの接続は危険だから拒否する」という設定が標準です。つまり、コードに問題があるのではなく、「握手の言語が古すぎて門前払いされている」状態なのです。

これを解決するには、プロトコルを明示的に指定してあげる必要があります。

【実践】TLS 1.2/1.3を強制するコード

まずは、何も考えずに動く魔法のコードを見てみましょう。これをテンプレートとして保存しておいてください。

‘ WinHttpRequestオブジェクトの生成
Set http = CreateObject(“WinHttp.WinHttpRequest.5.1”)

‘ 【最重要】プロトコルを指定するための定数
‘ 0x00000800 は TLS 1.2 を意味します
‘ 0x00002000 は TLS 1.3 を意味します(OS環境によりサポート状況が異なります)
Const WinHttpRequestOption_SecureProtocols = 9
Const SecureProtocol_TLS1_2 = 2048

‘ APIエンドポイント(例としてHTTPSのサイトを指定)
url = “https://api.example.com/v1/data”

On Error Resume Next ‘ エラー制御の開始

‘ 1. 通信設定の適用
http.Option(WinHttpRequestOption_SecureProtocols) = SecureProtocol_TLS1_2

‘ 2. リクエストの初期化
http.Open “GET”, url, False

‘ 3. 送信
http.Send

‘ 4. 結果の確認
If Err.Number = 0 Then
WScript.Echo “通信成功!レスポンス:”
WScript.Echo http.ResponseText
Else
WScript.Echo “エラー発生: ” & Err.Description & ” (コード: ” & Err.Number & “)”
End If

On Error GoTo 0 ‘ エラー制御の解除

コードのポイント解説:なぜこれで動くのか?

1. `http.Option` の役割

このオブジェクトには「設定の窓口」である `Option` プロパティがあります。通常はOS任せですが、ここに `9` (WinHttpRequestOption_SecureProtocols) を指定することで、「これから使う暗号化プロトコルは私が指定する」と宣言するわけです。

2. `2048` という数字の魔法

`2048` は16進数で `0x800`。これは「TLS 1.2」を指し示すビットフラグです。
もしサーバーがTLS 1.3まで要求してくる場合や、複数のプロトコルを許可したい場合は、これらの値を加算(OR演算)して設定します。

3. `On Error Resume Next` の哲学

ネットワーク通信は「水物」です。LANケーブルが抜けているかもしれないし、サーバーが落ちているかもしれない。エラーを致命的な停止にするのではなく、`Err` オブジェクトで捕捉し、ログを出す。これが現場で生き残るスクリプトの書き方です。

陥りやすい罠と解決策

  • 「そんなプロパティは存在しません」と言われたら

お使いのOSが非常に古い(Windows XPなど)可能性があります。その場合、TLS 1.2自体のサポートがOSレベルでありません。Windows 7以降であれば、レジストリ設定等でTLS 1.2を有効化しているか確認してください。

  • 通信タイムアウトが頻発する

APIの応答が遅い場合、`http.SetTimeouts` メソッドでタイムアウト時間を延長しましょう。
`http.SetTimeouts 0, 60000, 60000, 60000` (全タイムアウトを60秒に設定)

まとめ:あなたの武器を現代へ

VBScriptは、正しく設定すれば現代のクラウドサービスやAPIとも十分渡り合えます。今回紹介した「TLS 1.2強制指定」は、これからVBScriptで自動化を推進する上で避けて通れない「関所」のようなものです。

ここさえクリアしてしまえば、あとは自由自在。JSONをパースするライブラリを組み合わせたり、ExcelをDB代わりにしたりと、あなたの自動化ライフは劇的に広がります。

「古い言語だから」と諦める必要はありません。その知識と工夫で、レガシーを最高のツールに変えていきましょう!

何か詰まったことがあれば、またいつでも聞きに来てくださいね。応援しています。

タイトルとURLをコピーしました