[ASP.NET MVC] Twitter 認証で「検証プロシージャによると、リモート証明書は無効です」

マスコットアプリ文化祭開発日誌 2日目。本日(10/20)のサイト自体の更新はありません。

マスコットアプリ文化祭のサイトでは Twitter によるサインイン機能を実装しますが、ローカル環境で動作していなかった問題を修正して(下記)、バリバリ制作中です。

Twitter 認証で例外

ASP.NET MVC では簡単に Twitter によるサインイン機能を実装することができます(それ自体は割愛)。のはずが……次のような例外が発生します。Twitter の証明書の Thumbprint を指定しないといけないようです。

検証プロシージャによると、リモート証明書は無効です。

説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.Security.Authentication.AuthenticationException: 検証プロシージャによると、リモート証明書は無効です。

ソース エラー:

現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。

スタック トレース:

[AuthenticationException: 検証プロシージャによると、リモート証明書は無効です。]
System.Net.TlsStream.EndWrite(IAsyncResult asyncResult) +230
System.Net.PooledStream.EndWrite(IAsyncResult asyncResult) +15
System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar) +119

[WebException: 基礎になる接続が閉じられました: SSL/TLS のセキュリティで保護されているチャネルに対する信頼関係を確立できませんでした]
System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) +606
System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar) +64

解決方法は、.net – Owin Twitter login – the remote certificate is invalid according to the validation procedure – Stack Overflow より。

Startup.Auth.vb (C# は Startup.Auth.cs) を次のように BackchannelCertificateValidator プロパティの値を設定します。オマケとして Provider プロパティを次のように指定すると、Access token と Secret もデータベースに保存され、Twitter をサインインだけでなく、ツイートの読み書き等も可能です。

IIS Express 設定の編集

開発時の関連情報です。

ASP.NET MVC 既定で使用する localhost を使った URL では Twitter アプリ に設定できないため、IIS Express の設定や hosts ファイルを編集してローカルでも test.example.jp のような URL でアクセスできるようにします。

参考: IIS Express で仮想サイトに複数のホスト名を割り当てる – しばやん雑記

Visual Studio 2015 では、ソリューションフォルダー以下の .vs フォルダー内に applicationhost.config があります。