You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

开发环境下如何信任/忽略ASP.NET Core API的TLS证书验证?

解决开发环境下ASP.NET Core API的TLS证书信任问题

你碰到的这个错误,核心原因是ASP.NET Core在开发环境默认用的是自签名SSL证书,而你的客户端(这里是iOS/macOS的URLSession)会默认拒绝信任这类未被系统官方认可的证书。既然你明确是开发场景、不关心安全风险,确实可以临时跳过证书检查,但一定要记死:绝对不能把这个逻辑放到生产环境里

方法一:自定义URLSession跳过证书验证

你可以创建一个忽略证书检查的自定义URLSession,替换默认的URLSession.shared来发起请求,代码示例如下:

// 创建自定义会话配置
let config = URLSessionConfiguration.default

// 实现自定义Delegate,处理证书验证逻辑
class TrustAllCertificatesDelegate: NSObject, URLSessionDelegate {
    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        // 直接信任所有服务器证书
        completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
    }
}

// 初始化带自定义Delegate的URLSession
let trustAllSession = URLSession(configuration: config, delegate: TrustAllCertificatesDelegate(), delegateQueue: nil)

// 用这个自定义会话发起POST请求
let jsonData = try? JSONSerialization.data(withJSONObject: data)
let url = URL(string: "https://192.168.0.100:5001/api/Trips")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = jsonData

let task = trustAllSession.dataTask(with: request) { data, response, error in
    guard let data = data, error == nil else {
        print(error?.localizedDescription ?? "Unknown error occurred")
        return
    }
    if let responseJSON = try? JSONSerialization.jsonObject(with: data) as? [String: Any] {
        // 处理返回的JSON数据
        print(responseJSON)
    }
}
task.resume()

更规范的开发环境方案:信任自签名证书

如果不想让代码带上不安全的逻辑,你也可以把ASP.NET Core的开发证书添加到系统信任列表里,这样URLSession就不会再报错了:

  • Windows:找到ASP.NET Core开发证书(通常在%USERPROFILE%\.aspnet\https目录下),双击导入到「受信任的根证书颁发机构」
  • macOS:打开「钥匙串访问」,找到对应的ASP.NET Core开发证书,右键选择「显示简介」,在「信任」选项卡设置「使用此证书时」为「始终信任」

这个方案更干净,也不会留下安全隐患,推荐在开发时优先使用。

重要警告

再强调一次:跳过证书验证的代码只能用于本地开发测试,一旦到生产环境,必须使用正规CA颁发的SSL证书,否则会导致用户数据泄露、被中间人攻击等严重安全问题!

内容的提问来源于stack exchange,提问作者ivan.vliza

火山引擎 最新活动