带有 iOS 应用程序的 SSL 证书

Posted

技术标签:

【中文标题】带有 iOS 应用程序的 SSL 证书【英文标题】:SSL Certificates with iOS application 【发布时间】:2017-10-06 19:15:36 【问题描述】:

我是 SSL 证书的新手,我想验证我的理解。

我们是一家初创公司,我们有一个特定的域名,我们想用 SSL 证书进行保护。

该域与一个服务器相关联,该服务器上安装了一个网络服务器和另一个用 Java 编写的具有自己协议的服务器应用程序,我们希望使用 SSL 保护这两个服务。

我们正在开发一个 OS X 应用程序和一个 ios 客户端应用程序。它们使用 Foundation 的 CFStreamCreatePairWithSocketToHost(...) 通过 CFReadStream(...) 和 CFWriteStream(...) 连接到 Java 服务器。

我想验证我的理解:

(1) 拥有 OV 证书而不是 DV 证书的唯一优点是我们的组织名称将列在证书详细信息中。

(2) 只有一个单一 SSL 证书足以保护网络服务器和自定义 Java 服务器应用程序,我需要将其安装在 Apache 中并使用 Oracle Keytool Utility 提供给 Java Keystore 文件。

(3) 我们正在考虑使用 Go Daddy EV 或 DV 证书,因为“Go Daddy 2 类证书颁发机构”和“Go Daddy 根证书颁发机构 - G2”列在“@ 987654321@".

(4) 一旦安装在服务器上,在我的 OS X/iOS 应用程序中没有什么特别要做的,但在打开流之前插入它(在 Swift 中):

inputStream.setProperty(StreamSocketSecurityLevel.ssLv3, forKey: Stream.PropertyKey.socketSecurityLevelKey)
outputStream.setProperty(StreamSocketSecurityLevel.ssLv3, forKey: Stream.PropertyKey.socketSecurityLevelKey)

感谢您的见解!

【问题讨论】:

1) 差不多 + 别人更难冒充你并颁发新证书 + 更昂贵,需要更长的时间来设置 2) 一个证书,是的。不确定如何“安装”它。 3) 是 4) 是的,但您也可以考虑使用证书固定。 EV 证书不添加额外的安全控制。它们是一种营销噱头,也是 CA 将利润水平恢复到 1990 年代的一种方式。在 EV 证书中执行的检查与 CA 在降低证书价格且 CA 停止执行检查之前应该进行的检查相同。 OV 证书很危险。它们允许组织为其管理控制下的域以外的域铸造证书。 CA 通过签署组织的中间证书(允许签署最终实体证书)向组织出售钱。反过来,这些组织可以欺骗他们想要的任何域。 【参考方案1】:

您应该绝对不允许允许 SSLv3。该协议高度不安全。 TLSv1.2 是您应该允许的绝对最低版本,假设您的客户端操作系统版本和服务器都支持它,您应该将其限制为 TLS v1.3 及更高版本。

【讨论】:

使用 TLS 1.3,选择 SSL 证书还是流对实现有什么不同吗? 如果我理解正确的话,SSL证书也是TLS的证书,它只是一个名称。启用 TLS 所需要做的就是将 StreamSocketSecurityLevel.ssLv3 替换为 StreamSocketSecurityLevel.tlSv1? 大致相同,是的。不同的标准支持不同的加密算法(用于密钥、签名、散列等),并且某些算法在新标准中被禁止,因为它们太弱了,但是没有 CA 仍然应该支持那些旧算法(尽管一些 CA不再受信任,因为他们尝试过)。 一般推荐使用 NSStreamSocketSecurityLevelNegotiatedSSL,因为它可以让你的客户端代码保持不变,即使苹果后来添加了新的关卡并弃用了旧的关卡。 (旧的、不受信任的 SSL 级别不会由 iOS 协商,除非您明确启用它们,因此您更有可能通过指定特定级别来削弱安全性,而不是加强它。)

以上是关于带有 iOS 应用程序的 SSL 证书的主要内容,如果未能解决你的问题,请参考以下文章

通过带有 SSL 和证书的 Phonegap 连接到 Web 服务器

带有自签名 SSL 证书的 iOS MKTileOverlay

带有 express 的 socket.io 中的 SSL:缺少 PFX 或证书 + 私钥。

通过带有开发 SSL 证书的 xcode 在设备中推送通知测试

带有 SSL 和证书的 iPhoneHTTPServer

下载 iOS 应用程序时是不是必须使用 SSL 证书设置 Application Center?