首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache couchDB CA签名的证书问题

Apache couchDB CA签名的证书问题
EN

Stack Overflow用户
提问于 2013-06-11 11:42:50
回答 3查看 3K关注 0票数 5

我正在云中的Ubuntu12.10服务器(AWS)上运行Apache1.3.0版本的CouchDB实例。我正在尝试让SSL在我的couchDB实例上工作。

基本的SSL设置非常简单。我已经将我的证书和密钥放在目录中,并在我的local.ini文件中取消了以下行的注释

代码语言:javascript
复制
httpsd = {couch_httpd, start_link, [https]}
cert_file = /usr/local/etc/couchdb/certs/mycouchdbserver_cert.pem
key_file = /usr/local/etc/couchdb/certs/mycouchdbserver_key.pem

我还确保这些文件的所有权是正确的。

这很好,couchDB服务器启动,您可以导航到功用/,没有问题。

使用openssl进行测试

代码语言:javascript
复制
openssl s_client -showcerts -connect mycouchdbserver.com:443

给出标准SSL配置的正确结果。

在DigiCert网站上测试安装程序时(该公司的SSL证书是通过- test链接:http://www.digicert.com/help/购买的),我得到以下错误:

服务器没有发送所需的中间证书。

在购买SSL证书时,我从DigiCert获得了一个中间证书,并下载了DigiCert的根证书。

在用于local.ini的couchDB配置文件中,可以将这些配置与以下配置字段一起使用:

代码语言:javascript
复制
verify_ssl_certificates = true
cacert_file = xxxx

我的问题是,我不能让这个工作,并尝试了每一个可能的组合,以使这个工作。以下是我尝试过的:

  1. 尝试将cacert_file设置为来自DigiCert的中间证书
  2. 尝试将cacert_file设置为/etc/ssl/certs中的根证书
  3. 尝试将根证书从DigiCert网站添加到/usr/shared/ca-certs/,然后运行dpkg-重新配置ca-证书来安装新的根证书,并将cacert_file设置为/etc/ssl/certs中的新pem编码证书。
  4. 尝试将证书和中间证书合并到一个用于cert_file的文件中
  5. 尝试将证书、中间证书和根证书组合成一个用于cert_file的pem文件。

以上所有这些都会在couchDB日志中抛出错误。有些人在错误日志中给出了大量的输出,但是使用数字3,我得到了

代码语言:javascript
复制
=ERROR REPORT==== 11-Jun-2013::11:35:30 ===
SSL: hello: ssl_handshake.erl:252:Fatal error: internal error

以及使用openssl进行测试

代码语言:javascript
复制
CONNECTED(00000003)
16871:error:14094438:SSL routines:SSL3_READ_BYTES:tlsv1 alert internal    error:s3_pkt.c:1099:SSL alert number 80
16871:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:

有没有人知道如何在verify_ssl_certificates中正确地使用根证书和中间证书?

我在网上读过所有的文档,没有任何帮助。

事先谢谢安德鲁

EN

回答 3

Stack Overflow用户

发布于 2013-06-14 07:33:19

对任何感兴趣的人来说,这就是我们最终解决问题的方法:

似乎我们无法让couchDB与我们的中间证书一起正常工作。

由于我们在AWS EC2实例上运行我们的EC2服务器,我刚刚创建了一个ELB (弹性负载均衡器)实例,并将我的证书上传到ELB,然后在负载均衡器下添加EC2实例,并将我的DNS重新路由到负载均衡器(这里也使用Route53 )。

然后,我在couchDB上完全关闭SSL,并将SSL握手交给负载平衡器,后者支持使用中间证书。

这确实意味着ELB和couchDB之间的通信是不安全的,但对我们来说,这很好。

这也意味着,我们现在可以在ELB下添加更多的couchDB服务器,以实现可伸缩性,因此,可以使用2Birs1stone解决方案。

你也可以用Nginx做同样的解决方案,但是添加和管理一个ELB很容易并且很稳定,所以我们使用了ELB解决方案。

票数 4
EN

Stack Overflow用户

发布于 2013-07-21 19:00:00

有几件事CouchDB是敏感的。其中一个问题是Namec堆的重新发布表单。如果使用Namec堆处理CSR,则会出现问题。例如,我通过Namec堆购买了一个RapidSSL证书,为了正确地重新颁发它,我必须直接到GeoTrust获得一个工作证书:https://products.geotrust.com/orders/orderinformation/authentication.do

为了创建SSL证书,我执行了以下操作:

代码语言:javascript
复制
$ openssl genrsa -des3 -out server.pem 2048

使用了密码。它必须用于其他命令,请不要忘记它。

创建证书请求:

代码语言:javascript
复制
$ openssl req -new -key server.pem -out server.csr

只回答以下问题:

  • 国家/地区
  • 状态
  • 局部性
  • 组织
  • 公共名称

所有其他问题都是空白的。

此命令创建CouchDB将使用的未加密私钥:

代码语言:javascript
复制
$ openssl rsa -in server.pem -out server.key

当请求csr时,将server.csr文件的内容传递到文本框中。

经过一堆电子邮件,你最终会得到证书。另一个问题是CouchDB如何处理链接的证书。不要担心创建链接证书;忽略中间crt,您只需要特定的证书即可使couchdb正常工作。

修改CouchDB local.ini文件中的下列行:

代码语言:javascript
复制
[daemons]
; enable SSL support by uncommenting the following line and supply the PEM's below.
; the default ssl port CouchDB listens on is 6984
httpsd = {couch_httpd, start_link, [https]}

[ssl]
cert_file = /path/to/ssl/cert/server.crt
key_file = /path/to/ssl/cert/server.key

我不确定这是否会产生影响,但请确保SSL证书的权限设置为600。还请确保由CouchDB进程用户设置证书:

代码语言:javascript
复制
# in the ssl cert directory
sudo chmod 600 ./*
sudo chown couchdb:couchdb ./*

并重新启动服务器:

代码语言:javascript
复制
sudo /etc/init.d/couchdb restart
票数 4
EN

Stack Overflow用户

发布于 2016-09-17 20:20:17

摘要:您需要CouchDB 1.6.0或更高版本才能工作(或修补当前版本)。

我在运行CouchDB 1.4.0或Raspberry (raspbian )时也遇到了同样的问题。

我使用以下命令确认,CouchDB服务器只是发送自己的证书,而不是按照TLS规范的要求发送整个证书链:

代码语言:javascript
复制
openssl s_client -connect myhostname:6984 -showcerts

这只显示了一份证书。此外,它报告了一次核查失败。我的证书是Namec堆的。虽然我已经在客户端机器上安装了颁发者(COMODO )的根证书,但至少需要一个中间证书才能完成该链。

请注意,一些浏览器能够自动获取中间证书,并且所有这些都看起来很好。不过,大多数命令行工具(curl、perl、python、openssl)都失败了。同样有趣的是,在Android的Chrome浏览器上,它偶尔会显示出绿色锁(这一切都很好),而在其他时候,据报道该网站无法被验证。我怀疑它使用的是本地证书缓存。如果我碰巧浏览了一个提供相同中间证书的站点,那么验证将随后对我的CouchDB服务器成功,直到缓存被清除。

在深入研究CouchDB和Erlang源代码之后,我发现: Erlang可以作为“cacertfile”传递一个PEM文件。这既用于验证客户端证书(如果启用),也用于组成要发送到TLS证书消息中的客户端的完整证书链。但是,我的CouchDB版本并没有传递cacertfile参数,除非其中一个指定了cacert_file verify_ssl_certificates = true。但是,如果满足这些条件,则忽略服务器密钥和证书!

我发现这已经作为bug COUCHDB-2028归档了。请注意,bug说这个问题已经在1.7.0版本中解决了,我认为这个版本并不存在。

我发现修补程序已应用于正式的CouchDB存储库。在2014-01-30.不幸的是,官方的修订历史没有显示修复,但深入研究git显示,修补程序是在CouchDB 1.6.0中首次正式发布的。

在我的例子中,我能够从源代码下载、编译和安装CouchDB 1.6.1。现在,上面的openssl命令显示了由CouchDB服务器发送的4个证书链。我提供服务器密钥和证书,加上从Namec堆下载的CA包的cacert_fileverify_ssl_certificates是假的。我测试过的所有浏览器都信任这个站点,而且我的命令行工具可以在没有黑客攻击的情况下禁用验证。

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

https://stackoverflow.com/questions/17043233

复制
相关文章

相似问题

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