首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为没有域名的设备自动化软件包颁发SSL证书

问为没有域名的设备自动化软件包颁发SSL证书
EN

Security用户
提问于 2012-11-22 10:31:43
回答 3查看 1.6K关注 0票数 5

我们正在为Windows开发自动化软件,该软件通过我们自己的专用连接协议与特定设备进行通信。该软件包由多个服务器(包括HTTP)和客户端应用程序组成,通常在私有企业环境中运行。这里最重要的是,通常我们的服务器组件不会有域名(仅仅拥有IP地址就足够了)。现在,我们有了一个创建web应用程序的请求,该应用程序将与我们的服务器组件安全地从互联网上进行通信。最明显的方法是HTTPS/SSL。我们可以做到的。他们的问题是:我们包的消费者是否需要从可信的CA购买SSL证书(拥有一个自签名的证书是不够的)?可信CA可以仅仅基于IP地址而不使用域名来颁发证书吗?

EN

回答 3

Security用户

发布于 2012-11-22 10:44:32

我认为这里有两种选择:

  1. 服务器端证书-在这种情况下,您需要在服务器上获得一个证书。主机名,而不是IP地址是必须的,是非常可取的互联网,并将节省您的客户在未来的麻烦。有一个“altSubject.”在证书中输入IP地址的字段,该字段仍将进行验证。现在,客户机只需要任何SSL客户端,由SSL客户端信任的CA颁发的证书就可以工作了。
  2. 客户端证书-您可以是CA并向所有客户端颁发自己的证书,只要您的Web服务器建立了传入客户端证书的有效性,它就可以证明身份以及传输的机密性。当然,这些也可以是CA发行的.在您的场景中,这种方法会稍微好一些,因为您可以撤销那些不为您的软件付费并且仍然想使用它的证书:)
票数 3
EN

Security用户

发布于 2012-11-22 12:22:56

你的问题在客户端。在SSL连接中,客户端必须使用服务器的公钥,因此必须确保它知道正确的密钥;攻击者的目标是诱使客户端使用假公钥。SSL定义服务器将其公钥作为证书链的一部分发送,然后由客户端验证(验证签名、日期、吊销状态和大量扩展的复杂过程)。但是,有效的证书本身对客户端并没有什么帮助;客户端必须确保它知道服务器的证书。因此,客户端必须在(有效)证书中查找“预期的服务器标识”。

因此,你对这个主题有两个重要的方面:

  • 服务器的证书必须对客户端预先信任的给定的信任锚(也称为“根证书”)有效。
  • 服务器的证书必须以一种能说服客户端的方式包含它的身份。

在通常的Web上下文中,客户端是Web浏览器,浏览器供应商(或OS供应商)已经为其提供了大量的“默认根CA”。身份匹配在RFC 2818中描述:由于客户端试图连接到包含主机名的URL,客户端将在证书中的两个位置(主题名称的CN部分和主题Alt名称扩展名)中查找相同的主机名。这就是“域名”产生影响的地方:客户端在证书中查找的名称也是客户端针对DNS使用的名称,以了解实际连接的位置。

如果您同时控制客户端和服务器代码,那么您可以选择任何您想要的机制。客户端可以预先“知道”服务器的公钥(在代码中硬编码,或者通过本地配置文件),而完全忽略服务器的证书。客户端可以验证您认为合适的任何CA集的证书,而不一定与Web浏览器中包含的CA相同。您可以维护自己的服务器:如果这只是针对您的服务器,CA最多每年会颁发几个证书,因此它可以使用相当粗糙的技术(您可能希望将其保存在一个保险箱中,但它可以使用廉价的软件和手动过程;例如,请参见EJBCA,甚至OpenSSL)。最后但并非最不重要的一点是,您不需要在RFC 2818要求的相同位置上查找服务器的身份。因此,处理域名并不是很难的要求。

如果您不控制客户端代码(例如,客户端是Web浏览器,或者某些现有库代码坚持使用与Web浏览器相同的规则,即RFC 2818),那么根据定义,您需要遵守Web用法:与域名链接、来自“公认的”CA (客户端系统信任的CA)的证书。

票数 2
EN

Security用户

发布于 2012-11-22 10:58:48

SSL证书提供公共名称的真实性,在HTTPS世界中,该名称是域名。基本上,浏览器根据证书的验证和公共名称与当前域的比较来验证证书。因此,对于www.example.com,证书必须有一个与www.example.com匹配的公共名称。这可能不是直接匹配,因为子域通配符证书可以与*.example.com匹配。但是,为foobar.com生成的证书永远不允许与barfoo.com匹配,反之亦然。记住,如果这是严格在浏览器内的实现。

但是,在自定义客户端实现中,可以以任何您认为合适的方式强制使用公共名称。它可能是一个人的真名、GUID、IP地址等等。事实上,存储在公共名称字段中的数据并不重要,但是针对真实身份来执行该数据是重要的。使用域名的原因是,域可能代表各种IP地址。特定主机的DNS记录可能有一个A记录(IPv4地址)、一个AAAA记录(IPv6地址)、一个MX记录(邮件服务器)等等。实际上,它可能有多个A记录,以便在多个物理主机之间实现负载平衡。此外,IP地址可以是动态的,并且经常被重新分配。这意味着单个站点不能总是通过其IP地址来标识。为与您的域关联的所有IP地址生成和维护SSL证书将非常麻烦,如果IP地址更改,则需要重新颁发新的证书。这远非理想,因此拥有一个SSL证书对域进行身份验证是一个更好的解决方案。

我不明白的是,为什么您的服务器不会与域名相关联。手动向IP地址颁发SSL证书将是痛苦的,要获得一个著名的CA为您签名要困难得多。我还要求您在服务器if发生更改时推送产品更新,而不是自己更改DNS记录。如果你的客户需要从一个新的设备到你的服务器,他们将不得不写下你的IP并发送过来,而不是仅仅记住一个简单的域名。此外,你可以获得几乎零域名-只有10美元/年在某些情况下。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/24369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档