結論から言うとmonoの問題だった。
参考:
- MonoでSSL接続しようとしたら怒られた - うなてっくろぐ
- The authentication or decryption has failed – Mono | Code Adventures
- Problems using SSL in C#
なでしこ2でsslにアクセスするとエラーが出る
「https://どこかhttpsでアクセスするurl」からHTTPデータ取得してそれを表示
エラーメッセージはこんな感じ
[SystemError]Error getting response stream (Write: The authentication or decryption has failed.): SendFailure at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
at System.Net.HttpWebRequest.GetResponse () [0x00000] in <filename unknown>:0
at System.Net.WebClient.GetWebResponse (System.Net.WebRequest request) [0x00000] in <filename unknown>:0
at System.Net.WebClient.ReadAll (System.Net.WebRequest request, System.Object userToken) [0x00000] in <filename unknown>:0
at System.Net.WebClient.DownloadDataCore (System.Uri address, System.Object userToken) [0x00000] in <filename unknown>:0
調べてみると、コードで何とかなるというのがまず出て来たので、試してみたら対処出来た。C#のコードはこんな感じ
public Object _dataGet(INakoFuncCallInfo info)
{
System.Net.ServicePointManager.ServerCertificateValidationCallback += (s,ce,ca,p) => true;
....
}
ただし、この対処だとhttpアクセスとhttpsアクセスが大差なくなるみたいなことが書いてあったので、これじゃいかんなともうちょっと調べてみると、要はmonoにルート証明書がインストールされてなかったのが原因らしかった。対処法は参考にしたページほぼそのままで
$ mozroots --import --sync
サードパーティーの認証を受入れる場合は
$ certmgr -ssl https://どこかhttpsでアクセスするドメイン
この認証本当に受入れていいの?みたいなメッセージが出たら「y」を押せばおk