自签名SSL证书还是CA证书?

53
我希望将我的网站的身份验证和注册部分加密(出于显而易见的原因)。这个网站是我和一些朋友在中学时代创建的,今天仍然在使用。我可能会在不久的将来将其注册为非营利组织,但无论如何,CA都需要花钱,而该组织没有任何资金,我们目前都是大学生。
Verisign不合理而GoDaddy则每年30美元。 GoDaddy不算太过分,并且我认为他们的证书被大多数Web浏览器所接受。关于GoDaddy的问题是我不知道它们为什么有不同的SSL产品(即为什么不进行验证会便宜?如果它只包含域名,这对证书和浏览器如何处理它是否有任何影响?)
还有,使用自己的证书是否有问题?登录页面是否可以是http,并附带说明我使用了自签名证书以及其指纹,并将表单发布到https页面? Safari的方法不错,也不会太可怕。但是,我担心Firefox 3的方法会吓到人们并导致我收到大量电子邮件,说我的网站正在被黑客攻击之类的事情。 我不知道IE如何响应自签名证书。(还有一个问题是为什么要花钱购买可以轻松创建的东西,但我不会提出其哲学部分,这是一个更实际的问题。)
总之,我是给GoDaddy每年30美元还是在一个小段落中告诉人们我正在做什么,并给予极少数真正需要我的指纹的人?
编辑:我在一个论坛上读到了更多信息,其中一些人提到只有在GoDaddy服务器上才能获得GoDaddy证书,而这个网站不是。 两件事:(1)这是真的吗? 还有其他价格大约相同的CA,因此论点应该仍然是一样的。
8个回答

53

有一个普遍的误解,认为自签名证书在安全性上本质上不如像GoDaddy和Verisign这样的商业CA出售的证书,并且如果使用它们,您必须接受浏览器警告/异常;这是错误的

如果您安全地分发自签名证书(或CA证书,如bobince所建议的)并将其安装在将使用您站点的浏览器中,它与购买的证书一样安全,不易受中间人攻击和伪造证书的攻击。显然,这意味着仅当只有少数人需要访问您的站点时才可行(例如内部应用程序、个人博客等)。

为了增加用户的安全保护意识并鼓励像我一样的小型博主保护自己,我编写了一个入门级指南,介绍了证书背后的概念以及如何安全地创建和使用自签名证书(包括代码示例和截图),在此处


4
问题在于:不可能通过WAN网络安全地分发自签名证书,必须通过CD-ROM甚至是 USB 手动发送,并使用安全的邮件方式。因此,最终自签名证书始终比官方签名证书不安全,我们无法确认客户端或其ISP信息——例如存在病毒感染的客户端。 - specializt
1
自管理的CA怎么样?我猜在这个问题的背景下,自管理的CA相当于自签名证书。 - Erik Kaplun
1
使用自签名证书来为Android应用程序提供安全保障是否值得推荐?例如,我有一个服务器为我的Android应用程序提供REST API服务,我能否使用自签名证书来实现安全通信? - Sun
1
每当向服务器发送请求时,服务器都会将证书发送给客户端,因此证书本身并不是秘密。秘密在于服务器拥有的私钥。SSL证书的目的是保护“数据流通道”,而不是限制某些客户端的访问。如果我说错了,请纠正我。 - webDeveloper
@Web开发者,您完全没有理解SSL和加密的整个概念,更不用说中间人攻击了。拦截SSL握手非常容易,交换公共服务器证书为自己的证书(也是自签名的),建立通信渠道并读取所有解密内容 - 攻击者可以轻松地自己建立到原始目标的新连接,通过并成为默默的观察者。这对于签名证书不起作用,因为在握手期间还检查证书链。自签名证书是不安全的。 - specializt
链接已经失效,请提供新的链接。 - suspectus

39
SSL证书有两个作用:加密流量(至少对于RSA密钥交换)和验证信任。如您所知,您可以使用任何自签名证书加密流量(或者如果我们谈论SSL 3.0或TLS,甚至可以不使用)。但是通过证书链来实现信任。我不认识您,但我确信Verisign(或者至少微软这么认为,因为他们收到了大量费用以默认方式在其操作系统中安装它),既然Verisign信任您,那么我也信任您。因此,当我访问这样的SSL页面时,并没有出现可怕的警告,因为我信任的某个人已经确认了您是您本人。
通常,证书越昂贵,发行证书机构的调查就越多。因此,对于扩展验证证书,请求者必须提交更多文件来证明他们的身份,作为回报,在现代Web浏览器中,他们将获得明亮、愉快的绿色条形码(我想Safari目前还没有做任何事情)。
最后,一些公司仅出于品牌名称的考虑选择像Verisign这样的大公司;他们知道他们的客户至少听说过Verisign,因此对于在他们的在线商店购物的人来说,他们的印章看起来比GoDaddy等公司的印章更加可靠。
如果品牌对您不重要,或者如果您的站点不容易遭受网络钓鱼攻击,那么您可以购买默认情况下在大多数Web浏览器中安装其根证书的最便宜的SSL证书即可。通常,唯一进行的验证是您必须能够回复发送到DNS管理联系人的电子邮件,从而“证明”您“拥有”该域名。你可以在非 GoDaddy 服务器上使用那些便宜的证书,但你可能需要先在服务器上安装一个中间证书。这是一个位于便宜的 $30 证书和 GoDaddy 的“真正”的根证书之间的证书。访问你站点的 web 浏览器会显示“嗯,好像这个是用中间证书签名的,你有吗?”这可能需要额外的一次请求。但然后它会从你的服务器请求中间证书,看到它链接到一个它认识的可信任的根证书,就没有问题了。
但如果你不能在服务器上安装中间证书(例如在共享主机方案中),那么你就没办法了。这就是为什么大多数人说 GoDaddy 的证书不能在非 GoDaddy 服务器上使用。虽然不完全正确,但在很多情况下可以算作正确。
(在工作中,我们在我们的在线商店使用 Comodo 证书,并使用廉价的 $30 GoDaddy 证书来保护与数据库的内部连接。)

5
SSL本身提供流量加密,不是服务器证书。使用Diffie-Hellman密钥协商,您可以获得一个保密的SSL通道,而无需任何证书。但如果你甚至不知道你在和谁交谈,你是否能把你告诉他们的东西视为秘密? - erickson
6
中间证书不需要额外的往返服务器。服务器必须配置正确,以便一起正确发送中间和终端实体证书。任何像样的Web服务器的SSL配置都可以接受证书链,而不仅仅是单个证书。 - erickson
1
品牌与漏洞无关 - 即使是自签名证书,只要您使用能检测到证书更改(MitM攻击+SSL欺骗)并且不每次都点击“是”的浏览器,就是安全的。但让我们面对现实:自签名证书是无能的明确标志,现在有免费证书可用,您只需要证明您拥有该域 - 甚至这也不总是正确的,一些CA接受您拥有名称服务器或Web服务器的事实,甚至(!) - specializt

8

从这个新十年开始,您可以从免费的CA Let's Encrypt 获得证书,该证书被浏览器广泛支持。

我还没有尝试过StartCom,但在回答类似问题时提到过它。显然,您可以免费获得一年的证书,并且Firefox 3接受它。

即使您需要支付,我建议使用CA而不是自签名证书。有些人看不到您的解释,假网站可能会发布自己的虚假证书指纹,就像您提出的那样。我怀疑普通用户知道什么是证书指纹或如何检查它。


我曾经使用过Startcom,但由于它们不在IE的受信任列表中,所以与使用自己签名的证书相比并没有多大改善。 - Dscoduc
这是不正确的。Startcom证书包含在IE中。 - specializt
1
StartCom已经死亡。 - Kornel
@Kornel 不是死了,但也许不再相关了。 - erickson

7
不要创建自签名证书,而是创建自签名CA,并使用它来签署您的HTTPS证书。要求用户安装CA比单个服务器证书更容易,并且您可以创建新证书(例如用于子域或更新过期证书),而无需用户再次安装服务器证书。
然后,您可以稍后决定是否值得花费30美元将由您自己的CA签名的证书切换到由GoDaddy或其他公司签名的相同证书。
无论哪种方式,都不要有一个HTTP页面,其中包含提交到HTTPS的表单。用户看不到它正在去往HTTPS;他们必须查看源代码以检查表单是否已被劫持并指向其他地方,但没有人会这样做。您需要具有带有CA链接的HTTP首页和指向HTTPS登录表单的单独链接。
要求用户通过普通HTTP下载证书的CA有点淘气:如果存在中间人攻击,他们可以在飞行中替换您的CA并劫持随后的HTTPS连接。这种情况实际上发生的可能性非常低,因为它必须是有针对性的攻击,而不是简单的自动嗅探,但实际上您应该在其他受HTTPS保护的服务上托管CA下载链接。
客户接受度只有您知道,了解您的用户是谁。当然,Firefox界面过于可怕。如果像GoDaddy这样的CA现在只需30美元,我可能会选择它;以前情况要糟得多。
假设旧版和利基浏览器的支持不是问题,只需选择最便宜的CA即可。您应该支付CA适当验证您的身份,但实际上并非如此运作,从来没有这样。Verisign昂贵的价格仅通过企业惯性存活下来。
CA存在的目的是接收金钱,而无需做任何事情,只需拥有几百位私钥。本应是CA任务的身份验证内容已移至EV证书。它们甚至更加扯淡。令人愉快。

3

自签名证书不安全。是的,真的。"至少加密了"一点也没有帮助。从文章中可以得知:

世界级加密 * 零身份验证 = 零安全性

如果您的网站只是为您和几个朋友而设,则可以创建自己的CA并将证书分发给朋友。

否则,要么从已知的CA(免费)获取证书,要么根本不要使用自签名证书,因为你只会获得一个虚假的安全感。


为什么只有加密流量并不安全?你总是允许另一端解密你的流量(否则你发送的就是乱码)。 如果你不检查对方是谁,那么你就允许任何人解密你的流量。无论你是以安全方式还是不安全方式向攻击者发送数据,都没有区别——攻击者仍然可以获取数据。
我不是在说要检查例如paypal.com是否属于值得信赖的金融机构(这是一个更大的问题)。我在说的是要检查你是否正在向真正的 paypal.com发送数据,或者只是向街角的一辆车发送数据,并发送证书说"是的,我就是paypal.com,你有我的话就是真的!"

4
相较于任何人都可以读取的普通HTTP,使用自签名证书的SSL技术要先进许多。当然,它并非完全安全,就像你家前门上的锁一样 :) - Dan Rosenstark
1
这似乎是一场宗教性的讨论 - 不管你说什么,一个不喜欢自签名证书的人永远不会承认使用它们的价值... - Dscoduc
2
自签名证书无法解决密钥分发问题。根据不同的人的看法,这就是为什么PGP没有被广泛使用的原因。也许我应该这样说,如果你有SSL证书签名派对,那么你可以使用自签名证书。 - Chris
9
正如Clint在另一个回答中提到的,如果在尝试访问HTTPS站点之前没有分发自签名证书,则自签名证书才是不安全的。如果使用情况仅涉及将证书分发给少数人(例如,您站点的Web管理界面),则可以分发自签名证书。如果您不知道需要向谁分发证书(例如,面向客户的HTTPS站点),那么显然是不可行的。 - Doug Richardson

2
我昨晚终于放弃了自签名证书并将服务器更换为GoDaddy证书,这并不是什么大问题,只是他们的流程不够清晰。每年30美元的费用是合理的,而在非GoDaddy服务器上使用该证书也没有问题。
如果你要向公众谈论SSL,请获取由真正的CA签署的真正证书。即使你的工资很低,你也会节省超过30美元/年的浪费时间来处理用户的恐惧或不信任,这还没有考虑到可能由于他们被吓走而造成的任何可能的损失收入。

2
回答你关于Internet Explorer的问题,它会警告用户任何未被IE认可(不幸地称为“受信任”)的CA签名证书的网站。这包括您自己的CA和自签名证书。如果证书中的域与正在访问的域不同,它也会发出警告。
如果这是一个私人网站,只要您获得了链路级别的加密(您是否真的担心有人嗅探您的流量?),您可能不太在意。如果有公共访问并且您需要SSL,请像其他人已经建议的那样从公认的CA获取已签名的证书。

1

如果拐角处的那辆车已经能够劫持你的互联网连接,那你的问题比自签名证书还要严重。

银行应该使用客户端证书进行身份验证。这将使得那辆车无法做任何事情...因为它没有银行的私钥。

自签名证书是完全可以的...前提是你的互联网连接没有被入侵。如果你的连接已经被入侵了...那么你可能无路可走。


你知道SSL的中间人攻击是可能的。这也不是关于有人黑掉我的网络,而是我连接到的那个网络,一个我无法控制的网络。 - Jim Keener

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接