错误:ssl3_get_server_certificate:使用自签名证书时证书验证失败

时间:2016-01-04 12:27:16

标签: ssl certificate

我安装了zulip server,我遇到服务器证书问题。

首先,当我尝试通过网络Chrome进入时,会弹出关于网站认证的警告,让我选择(返回安全/添加例外)。

当我尝试通过机器人发送消息时,会出现另一个问题(这并不重要)。我收到这个错误:

requests.exceptions.SSLError: [Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

在安装指南中说明:

  

安装SSL证书

Zulip requires HTTPS, so you need to install an SSL certificate here:
/etc/ssl/private/zulip.key
/etc/ssl/certs/zulip.combined-chain.crt
     

如果您不知道如何生成SSL证书,那么您可以这样做   以下内容生成自签名证书:

apt-get install openssl
openssl genrsa -des3 -passout pass:x -out server.pass.key 4096
openssl rsa -passin pass:x -in server.pass.key -out zulip.key
rm server.pass.key
openssl req -new -key zulip.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey zulip.key -out zulip.combined-chain.crt
rm server.csr
cp zulip.key /etc/ssl/private/zulip.key
cp zulip.combined-chain.crt /etc/ssl/certs/zulip.combined-chain.crt

我按照我的要求做了(我做了一张自签名证书)。 本节下面有一个注释:

  

您最终希望获得正确签名的证书(和   请注意,目前Zulip桌面应用程序不支持自签名   证书),但这将让你完成安装过程。

也许这就是我的问题的原因?

如果没关系,我也很想得到关于证书是什么的简要说明。

修改: 我忘了提到服务器在封闭网络中脱机运行。我不确定它是否与上述问题有关,但无论如何我都会把它放在这里。

1 个答案:

答案 0 :(得分:0)

什么是(SSL / TLS)证书? very 简介中,数字(公钥)证书提供了一种验证公钥是否属于某个实体的方法作为服务器,用于确保您连接到合法服务器而不是骗子或间谍机构等冒名顶替者。 (这些之间有时可论证的区别在这里是偏离的。)

虽然有(并且过去)有几种数字证书,但SSL / TLS使用 X.509 标准和"PKIX" (Internet Public Key Infrastructure - X.509)等相关标准定义的类型。 通常,维基百科是一个很好的起点:https://en.wikipedia.org/wiki/X.509对于证书本身来说是非常彻底的(但不是简短的); https://en.wikipedia.org/wiki/Certificate_authority对你如何获得证书(或者不是)很好。 (技术挑剔:TLS规范允许使用其他类型的证书,但实际上没有人这样做;它们还允许使用没有服务器证书的匿名连接的可能性,但因为这些通常是不安全的实际上,大多数软件,特别是Web浏览器都不允许使用它们。)

使用"真实"证书。大多数SSL / TLS客户端设置为最初信任一百个左右的#34;众所周知的"像赛门铁克,Comodo和GoDaddy这样的CA,以及一些政府运营的CA,除了它们运营的国家之外还不为人知。确切集在不同平台上略有不同,随着新CA的建立而旧的关闭或合并或偶尔失败(例如DigiNotar),随着时间的推移而变化。如果您获得由其中一个已建立的CA颁发的服务器证书,则大多数客户端可能会自动接受它。 重要限制:您只能获得真实的" 属于您的域名的证书(或所有属于您的多个域名);究竟如何"属于"定义取决于CA,但通常意味着控制DNS,电子邮件和/或公共Web服务器。如果您要设置的服务器仅使用内部域(或非域)名称或私有(rfc1918)地址,则可能适用于您的"已关闭的网络&#34 ;,你无法获得真实的"证明它。

使用自签名证书。由于您尚未向所有浏览器,客户端和操作系统供应商建立您可以信赖的安全性,因此您的自签名证书在几乎所有软件的默认信任库中,因此您需要将其添加到信任库。如何执行此操作因而异,具体取决于您使用的客户。请注意,您应该将证书添加为"受信任的根"或者"可信任的权限",而不是私钥;幸运的是,几乎没有其他人接受OpenSSL格式" PEM"私钥文件。除了您的服务器之外,只要不要复制私钥(如果您愿意,还可以安全地离线备份)。

  • IE(我相信Edge)和Chrome / Windows使用Windows商店。这可以通过IE中的工具/选项在内容中作为证书,在Chrome / Advanced中作为管理证书,或直接从控制面板 - 内容作为证书的Internet下访问(特别是您可以添加您的证书)。

    < / LI>
  • Firefox(在所有操作系统上)使用自己的商店,在Tools / Options / Advanced下访问。

  • Chrome(ium)/ Unix我不知道

  • Java:已安装的JRE附带cacerts中的默认JRE/lib/security文件。 Java应用程序可以覆盖它,但不是很多,所以通常只需将您的证书添加到cacerts就足够了,除了安装新的JRE这一事实版本重置cacerts - 由于安全漏洞,您经常需要安装新的JRE版本。您可以通过使用jssecacerts来避免这种情况;使用您想要的CA进行设置 - 可能是cacerts中的一些但不一定是全部的,加上您自己的CA.然后在其他地方保存jssecacerts的副本,然后将其复制到任何新的JRE中。

  • OpenSSL(在Unix上)。从错误格式,您的机器人&#39;显然正在使用OpenSSL(或类似LibreSSL的分支)。 OpenSSL本身定义了一个默认的信任库位置,但不提供任何证书。但是,OpenSSL的许多打包器添加了一组CA证书,通常称为“ca-certificates&#39;或者&#39; pki-certs&#39;。你没有指定操作系统,但你使用apt-get建议使用Debian或Ubuntu;如果是这样,我就不知道您可能已经安装了什么,但涉及dpkg -lapt-cacheaptitude的内容可能会有效。如果是这样,可能有一个文档化的过程,用于将您自己的证书添加到分布式集合中;检查你的手册页。

    然而,OpenSSL使应用程序(或中间件)可以轻松使用与默认值不同的信任库。例如,curl是一种常见的命令行工具,通常使用OpenSSL(尽管它可以使用其他实现),并具有命令行选项--cacert --capath以使用自定义信任库。取决于您的机器人&#39;是,它可能有也可能没有相似或不同的选项,或者没有。

  • Windows上的OpenSSL原则上有类似的选项,但实际上更令人困惑。在Windows上没有单一的打包系统或文件层次结构,因为通常存在于给定的Unix变体或Linux发行版上,而是有许多或多或少完全不同的方法由很多人发明。如果您需要,请提出更具体,更完整的问题。