使用 Lets Encrypt SSL 证书配置 CouchDB

使用 Lets Encrypt SSL 证书配置 CouchDB

我想要做的事情: 现在我使用的是自签名 SSL 证书,效果很好。但我想用 的官方证书替换它们lets encrypt

我所拥有的(自签名证书): 下面是我现在拥有的 ssl 重要设置(local.ini)的输出:

[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 = /etc/couchdb/certs/server.crt   // these are my self made certificates
key_file = /etc/couchdb/certs/server.key    // these are my self made certificates

; set to true to validate peer certificates
verify_ssl_certificates = false
; Path to file containing PEM encoded CA certificates (trusted
; certificates used for verifying a peer certificate). May be omitted if
; you do not want to verify the peer.
;cacert_file = /full/path/to/cacertf
; The verification fun (optional) if not specified, the default
; verification fun will be used.
;verify_fun = {Module, VerifyFun}
; maximum peer certificate depth
ssl_certificate_max_depth = 1

我尝试过的(让我们加密): 按照 lets encrypt 的文档操作后,我得到一个/etc/letsencrypt/live/[domain]包含以下文件的文件夹:

-cert.pem       // seems to be the public certificate
-chain.pem      // seems to be the public certificate from the keychain
-fullchain.pem  // seems to be the cert.pem + chain.pem
-privkey.pem    // seems to be the private certificate

因此我尝试用 local.ini 中的旧证书替换新证书

[ssl]
cert_file = /etc/letsencrypt/live/[domain]/cert.pem      // new certificate
key_file = /etc/letsencrypt/live/[domain]/privkey.pem    // new certificate

问题: 重新启动 CouchDB 后,非 SSL 方式端口 5984 仍然有效。但在端口 6984 上使用 SSL 时,我connection reset error在 chrome 中遇到了问题。PS:我也为我的 nginx 使用相同的 letsencrypt 证书,它们运行完美。

有任何想法吗?

Openssl调试信息:

1)使用 SSL 和自签名证书,我可以获得一份打印的证书和大量我输入过的信息。

2)不使用 SSL 和 letsencryptopenssl s_client -connect localhost:5984

CONNECTED(00000003)
140581663061872:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:795:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 207 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE

3)使用 SSL 和 letsencryptopenssl s_client -connect localhost:6984

CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 207 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE

答案1

使用 CouchDB 1.6.x

复制文件/etc/letsencrypt/archive/xxxx/var/lib/couchdb/cert1/

检查 CouchDB 的访问权限

将以下值放入其中/usr/local/etc/couchdb/local.ini。注意,以下文件夹与上面复制到的文件夹相匹配。

cert_file = /var/lib/couchdb/cert1/cert1.pem
key_file = /var/lib/couchdb/cert1/privkey1.pem
cacert_file = /var/lib/couchdb/cert1/fullchain1.pem```

答案2

如何使 https ssl 在 Ubuntu 18.04 上的 CouchDB 2.3.0 上工作:

  1. 设置文件位于:/opt/couchdb/etc/local.ini
  2. 原始问题中的 [deamons] 容器是不需要的。
  3. 只有真正将文件复制到couchdb文件夹(参见frederics答案)并将文件所有者(使用chown couchdb:couchdb)更改为couchdb用户才是唯一有效的方法。 (符号链接或直接深度链接到letsencrypt文件夹都将失败)。
  4. 在 local.ini 中编辑后,不要忘记重新启动 couchdb

    systemctl 停止 couchdb;systemctl 启动 couchdb

  5. 使用 tail -f /opt/couchdb/var/log/couchdb.log 查看 couchdb 的启动错误

  6. 检查端口 6984 是否未被防火墙保护,请执行 ufw allow 6984

  7. 现在转到https://yourdomain.com6984并且couchdb将通过https工作。

  8. 当 letsencrypt 更新证书时,不要忘记重复步骤 3。

答案3

我正在使用以下解决方案。在 certbot 中,我有一个post renewal-hook包含以下几行的脚本:

rm -rf /opt/couchdb/letsencrypt
mkdir /opt/couchdb/letsencrypt
cp -rfL /etc/letsencrypt/live/ /opt/couchdb/letsencrypt
chown -R couchdb:couchdb /opt/couchdb/letsencrypt/

这会将证书复制到 couchdb 文件夹,并将所有权更改为 couchdb 用户/组。无论出于何种原因,证书文件必须归 couchdb 用户所有,而正常的读取权限/etc/letsencrypt似乎不够。

暗示:一开始我没有前两行rmmkdir这导致了一些问题,因为cp -rfL根据目标文件夹的存在,行为会有所不同。在一种情况下,生成的目录结构是,/opt/letsencrypt/live/<subfolders>而在另一种情况下是/opt/letsencrypt/<subfolders>。这第一次破坏了我的自动证书更新过程。

local.ini有:

cert_file = /opt/couchdb/letsencrypt/live/<my-hostname>/cert.pem
key_file = /opt/couchdb/letsencrypt/live/<my-hostname>/privkey.pem
cacert_file = /opt/couchdb/letsencrypt/live/<my-hostname>/fullchain.pem

这适用于 Ubuntu 20.04

相关内容