【问题标题】:Why is my server's wildcard SSL certificate being rejected?为什么我的服务器的通配符 SSL 证书被拒绝?
【发布时间】:2014-12-17 00:45:42
【问题描述】:

我正在使用NSURLConnection 连接到具有通配符 TLS 证书(如“*.domain.com”)的服务器,当我在我的 NSURLConnectionDelegate-connection:willSendRequestForAuthenticationChallenge: 方法中调用 SecTrustEvaluate 时,证书因无效而被拒绝。接受具有完全指定的 TLS 证书(如“server2.domain.com”)的另一台服务器。两个证书均由同一个 CA 颁发,我已将 CA 证书添加到设备的受信任证书列表中。

我在我的 iPhone / iOS 8.1 上看到了来自 Safari 的相同行为。具有通配符证书的服务器被报告为具有不受信任的证书,而另一台服务器工作正常。所以看起来iOS的默认证书验证拒绝通配符证书。是这样吗?

有没有办法告诉SecEvaluateTrust 允许通配符证书?这是我的-connection:willSendRequestForAuthenticationChallenge:的摘录

- (void)connection:(NSURLConnection *)connection
    willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
  if ([challenge.protectionSpace.authenticationMethod
         isEqualToString:NSURLAuthenticationMethodServerTrust]) {
    SecTrustRef trust = [challenge.protectionSpace serverTrust];
    SecTrustResultType trustResult;
    OSStatus status = SecTrustEvaluate(trust, &trustResult);
    if (status == noErr) {
      if (trustResult == kSecTrustResultProceed
          || trustResult == kSecTrustResultUnspecified) {
        // Success. server2 gets here
      } else {
        // Server authentication failure. server1 gets here
      }
    }
  }
}

编辑我们软件的 Android 版本可以很好地接受通配符证书,所以我怀疑这里有一些特定于 iOS 证书处理的东西。 Android 客户端使用BrowserCompatHostnameVerifier 来验证证书,据我了解,它执行与SecPolicyCreateSSL 相同的功能——执行与浏览器相同的证书检查。

【问题讨论】:

    标签: ios ssl ssl-certificate nsurlconnection secure-transport


    【解决方案1】:

    由于您在 Safari 上也看到相同的行为,因此可能是证书问题或您期望证书匹配的问题。请检查(或发布)证书的详细信息以及您如何访问它。示例:仅包含 *.example.com 条目的证书将匹配 foo.example.com,但不匹配 example.combar.foo.example.com。此外,有关名称的任何信息都应在 SAN 部分(主题备用名称)中,为此使用通用名称已被弃用。

    【讨论】:

    • 好的,证书将主题部分中的“*.domain.com”名称列为通用名称。主题备用名称部分仅列出了一堆 IP 地址。我会看看我是否可以让我们的服务器人员生成一个在 SAN 部分中列出通配符名称的证书。
    • 将通配符添加到主题备用名称部分似乎已解决此问题。谢谢!
    【解决方案2】:

    我们在最新的 iOS 设备上遇到同样问题的另一个原因:Apple 不允许在域名中使用下划线 (_)

    没有下划线,一切都开始工作了。

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 2019-07-23
      • 2019-06-30
      • 2019-06-05
      • 2017-07-27
      • 2014-06-03
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      相关资源
      最近更新 更多