Line傳送訊息原本可以竟然都不行了(無法建立 SSL/TLS 的安全通道)

之前有分享過兩篇使用Line Notify的機制發送訊息圖片,沒想到因為有降版開發(4.7–>4.5),突然之間都不行了,花了好多時間DeBug,分析從Line Notify那邊的回應看到,竟然發生了「無法建立 SSL/TLS 的安全通道」,原來Line把TLS1.0、1.1都關掉了,強迫你要用TLS1.2,而恰巧我跑的都不是1.2,那當然就GG了,還好有解,請看下面分享:

原因就在於我開發的程式使用的是.NET framework 4.5,所以要設定 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 語法,強迫使用TLS1.2,當然如果是開發.NET framework 4.5以上的版本,就不會出現這個問題了。

所以之前傳訊息的範例要改成以下才能運作:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // 使用.NET framework 4.5 要加上這一行強迫改用TLS1.2
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "{替換你的權杖金鑰}");
var content = new Dictionary<string, string>();
content.Add("message", "測試訊息");
httpClient.PostAsync("https://notify-api.line.me/api/notify", new FormUrlEncodedContent(content));

發圖片的要改這樣:

private void button1_Click(object sender, EventArgs e)
{
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // 使用.NET framework 4.5 要加上這一行強迫改用TLS1.2
    string token = ""; // Please set Token.
    string msg = "Notify test";
    string ApiUrl = "https://notify-api.line.me/api/notify";
    FileStream img = File.OpenRead(@"C:\Windows\Web\Screen\img100.jpg");
    var http = new HttpClient();
    {
        http.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("multipart/form-data"));
        http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
        var body = new MultipartFormDataContent();
        body.Add(new StringContent(msg), "message");
        if (img != Stream.Null)
        {
            var imgFile = new StreamContent(img);
            body.Add(imgFile, "imageFile", "*");
        }
        http.PostAsync(ApiUrl, body);
    }
}

感謝攻城獅大大的文章,請參考這篇來源。

More From Forest Beat

桜のフリ

設定Docker中node-Red的掛載

容器最強的部份,就是把資料分離出來,因此要設定給容器一個host的掛載位置,那麼設定檔與資料內容就會分離出來,並存放在host的資料夾中。在Synology NAS,要先建好一個給Docker專用的「共用資料夾」,然後在該共用下建立新的資料夾,記得要設定為明確權限,並且給予Everyone的寫入權限,這樣就可以囉。
技術
0
minutes
三ツ峠の紅葉のフリ

Docker安裝node-Red設定檔settings.js的位置

如果採用不將資料掛載出來的方式建立dockek的NodeRED,那設定檔會在哪邊呢? 要如何進行修改呢?答案很簡單,要能夠終端機到容器中,然後編輯/usr/src/node-red/node_modules/node-red/settings.js
技術
0
minutes
チューリップ畑のフリ

Docker使用bridge與host網路的差異

Docker使用bridge網路的好處是封閉但是可以聯網,容器彼此之間也無法辦訪,可以做到簡單的隔離,port可以與host重複,反正在轉port即可。host網路就有點危險了,就是實實在在以host的網路進行連線,因此同網路中,能夠看見它,除此之外,不可以與host主機使用相同的port,例如80已經被host用掉的,就不能再容器中使用80。
技術
0
minutes
つくしのフリ

用Docker佈署新的服務

下載專用的Image檔後,就可以副本產生容器,所以要有多少個都沒問題。因為是共用Image檔案所以會很省空間,另外資料可以掛載出來,這樣又能做到完全分離,例如Mariadb資料庫,可以把資料與設定檔掛載出來,日後要重灌或更新容器就很簡單。
技術
0
minutes
spot_imgspot_img