【C#】9月からLINE APIはTLS1.2以降のみ対応になっていた
はじめに
今回はLINE API
の仕様変更をすっかり見落としていた件を紹介します。
もしかしたら自分のようにハマる方もいるのかなと思い記事にしました。
前提として
C#
でLINE API
を使っているコードがあります。
何も特別なことはしておらずSystem.Net.Http
を使ってLINE公式アカウントから友達登録しているアカウント全てにブロードキャストメッセージを送るものです。
ブロードキャストメッセージについて詳しく知りたい方は公式の以下のページを参照してください。
コードは以下のような感じです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Collections;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace Hoge
{
public class Send
{
HttpResponseMessage response = null;
string uri = "https://api.line.me/v2/bot/message/broadcast";
string text = "ほげほげ";
using (HttpClient client = new HttpClient())
{
// リクエスト作成
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + "【アクセストークン】");
Body requestBody = new Body();
requestBody.Messages.Add(new Message(text));
// JSONに変換
string json = JsonConvert.SerializeObject(requestBody);
var content = new StringContent(json, Encoding.UTF8, "application/json");
// リクエスト
response = await client.PostAsync(uri, content);
// responseの解析処理が続く・・・
}
}
}
2021年9月から送信エラーになっている?
この処理でそこそこ長い期間動作してくれていましたが、2021年9月より以下のException
を吐くようになりました。
※以下はException.Message
の中身
この要求の送信中にエラーが発生しました。
最初はLINE公式アカウントの送信制限に引っかかったのかなと思いましたが、他のアカウントで同様の処理を走らせても結果は同じ。
なので、「LINE API
側の仕様変更かな?」と思ったところビンゴでした。
TLS1.2
以降を使おう
以下がLINE公式からのアナウンス記事になります。
記事にある通り、LINE API
にリクエストを投げる際にTLS1.0
もしくはTLS1.1
はサポートしなくなるとのことで、時期的にもぴったり当てはまりました。
C#
というか.NET Framework
のバージョンによってはデフォルトがTLS1.2
になっていないものがあり、今回の環境がまさにそれでした。
対処
先ほどのコードに以下(System.Net.ServicePointManager.SecurityProtocol
)を指定するだけです。
※要は明示的にTLS1.2
を使うことを記載する。
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
System.Net.ServicePointManager.SecurityProtocol
の詳細については公式に記載があります。
反省・まとめ
今回はLINE API
が2021年9月以降TLS1.1
以下をサポートしなくなった件でハマった内容をまとめました。
公式のアナウンスをすっかり見落としてしまった経緯としては「長い期間安定稼働していたこと」や「当該機能の担当が変わり、このあたりの仕様の理解や公式アナウンスチェックの重要性が引き継がれていなかったこと」があります。
LINE
に限らず、特定のタイミングからTLS1.1
以下のサポートを切るサービスは近年多く見られるので、外部のサービスと連携しているアプリケーションにおいては、「公式アナウンスを自動的に収集する」ような仕組み構築が重要かなと思います。
※収集した情報は自動でSlack
などに通知できるようにすると尚良いですが、大概はサービスの開発者として登録しているメールにお知らせが届いているはずなので、そちらを参照するだけでもよいかと思います。
今回の内容が役立てば幸いです。
Discussion