.NET Core JWTBearer 跳過自簽名證書驗證以與身份伺服器進行本地通信
我有兩個 API 項目,一個基於 .NET Framework 4.6.2(舊 API),另一個基於 .NET Core 2.0。舊 API 可以非常簡單地禁用自簽名證書驗證:
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };但是,此程式碼在 .NET Core 中不起作用(即使它編譯得很好),並且當 API 嘗試通信時(特別是當它嘗試從身份伺服器獲取發現文件時,它會導致我出現問題,這在反向代理,在這種環境中,它具有用於 https 的自簽名證書)。我在 StackOverflow 上看到過類似的問題,但所有答案都與 HttpClient 的創建方式有關。對我來說,問題是我無法控制 HttpClient 的創建方式(令牌驗證是中間件,我看不到任何控制它如何創建 HttpClient 的方法),所以我想知道是否有全域方式在 .NET Core 中跳過自簽名證書驗證?
編輯:我的問題似乎與這個問題密切相關,但是我已經獲取了自簽名證書並將其載入到容器(執行 api 的位置)和我的本地電腦(執行容器的位置)的受信任根中,並且我仍然收到證書驗證錯誤。
我應該更仔細地查看 JwtBearerOptions,結果我可以設置
options.BackchannelHttpHandler,例如:options.BackchannelHttpHandler = new HttpClientHandler { ServerCertificateCustomValidationCallback = delegate { return true; } };– 現在它按預期工作。編輯:雖然可以在 .NET Core 中跳過證書驗證,但我最終放棄了這種方法,因為查找所有具有 HttpClient 的組件並修改 HttpClient 以跳過證書驗證變得太麻煩了。我最終採用的方法是使用easy-rsa創建一個 CA ,然後生成由 CA 簽名的證書。然後唯一的步驟是將 CA 證書導入容器中,它們將信任其他證書。聽起來可能很多,但 easy-rsa 命令界面相當簡單,而且最終並沒有付出那麼多努力。