在Mac OS X应用程序中运送SSL证书

时间:2016-04-10 01:29:06

标签: macos ssl https dns

我正在编写一个实用程序Mac OS X应用程序,它基本上充当接受传入HTTP请求的Web服务器(将其视为模拟REST API服务器)。我希望能够支持HTTPS,但理想情况下我想删除用户必须购买自己的SSL证书的要求。

我一直在思考如何实现这一目标。假设我注册了一个名为myapp.com的域名。然后,我购买了由注册CA签名的myserver.myapp.com SSL证书。我发布的应用程序包含嵌入其中的SSL证书详细信息。我的所有用户都需要更新他们的/etc/hosts文件,以便将myserver.myapp.com指向我的应用安装和运行的任何IP地址。

事实上,到目前为止,最常见的情况是我的应用程序在与客户端相同的计算机上运行,​​因此我正在考虑更新myserver.myapp.com的主DNS条目以指向127.0.0.1 ,大多数用户不必改变任何东西。

所以,这是基本理论。我错过了什么会使这个计划变得不可行?我想到了一些事情:

  • 我可以使用自签名证书。但是,如果证书没有有效的CA链,许多SSL客户端会禁止(或抛出警告)。我很高兴为真正的证书付钱,以减轻我的用户的这种不便。
  • 我会将我的SSL证书的私钥嵌入到我的应用中。理论上,有人可以提取并使用它来模仿我的应用程序。我想我的反应是“那又怎么样?”我的应用程序是一个小型生产力应用程序,它不是一个电子商务网站。它不收集敏感信息。它实际上只是模拟Web服务器响应,因此开发人员可以测试他们的应用程序。

非常感谢任何建议/反馈。感谢。

2 个答案:

答案 0 :(得分:3)

这不起作用 - 但出于非技术原因。

将SSL证书及其相关密钥分发给用户将违反SSL证书提供商的颁发条款,并且当他们发现您所做的工作时,他们将撤销证书。 (例如,这发生了when Pivotal tried to offer SSL service for developers through sslip.io。)这当然会导致您的申请停止工作。

如果您的用户拥有对其计算机的管理访问权限,则他们可以create and trust their own self-signed CA using Keychain Access。完成后,他们可以创建证书(再次使用Keychain Access)并将其插入应用程序以启用SSL。

答案 1 :(得分:0)

正如在另一个答案中所说,你不能为每个人发送相同的证书。你能做的就是为每个人创造不同的东西:

  1. 应用程序会询问他们想要使用的域名(他们必须拥有的域名,例如myapp.example.com)

  2. 应用程序使用ACME协议从let加密中自动获取可信证书

  3. 注意:您可以为他们提供您控制的域的子域名(例如[clientid] .yourappname.yourdomain.com)您只能在公共后缀列表中注册yourappname.yourdomain.com(因为我们要加密)有利率限制)