无法使用管理员和自签名 SSL 证书复制 CouchDB 数据库

Posted

技术标签:

【中文标题】无法使用管理员和自签名 SSL 证书复制 CouchDB 数据库【英文标题】:Not able to replicate CouchDB databases with admin and self signed SSL certificate 【发布时间】:2018-05-02 13:31:00 【问题描述】:

我的本​​地和远程 CouchDB SSL 服务器配置

cert_file   /etc/couchdb/cert/couchdb.pem   
key_file    /etc/couchdb/cert/privkey.pem
port        6984
ssl_certificate_max_depth   1
verify_ssl_certificates false

每当我像这样在本地沙发数据库的 _replicator 数据库中创建文档时


   "_id": "181361e45e43f9363612b9dec1005a78",
   "_rev": "6-87e9881fd3fecb26e906bb38b8e00a2f",
   "source": "https://adminname:pass@localhostName:6984/DatabaseFromReplicate/",
   "target": "https://adminname:pass@remotehostName:6984/DatabaseToReplicate/",
   "continuous": true,
   "owner": "Admin Name"

我的文档被修改为


  "_id": "181361e45e43f9363612b9dec1005a78",
  "_rev": "7-87e9881fd3fecb26e906bb38b8e00a2f",
  "source": "https://adminname:pass@localhostName:6984/DatabaseFromReplicate/",
  "target": "https://adminname:pass@remotehostName:6984/DatabaseToReplicate/",
  "continuous": true,
  "owner": "Admin Name",
  "_replication_state": "error",
  "_replication_state_time": "2018-05-02T07:23:07-06:00",
  "_replication_state_reason": "timeout",
  "_replication_id": "f236397473a906778fd8edbe63dbe59d"

DatabaseFromReplicate 存在于本地 couchDb 中,DatabaseToReplicate 存在于远程 couchDb 中

我的 CouchDB 日志显示:

由于错误 conn_failed,error,closed 在 0.25 秒内重试 HEAD 请求到 https://admin:*****@remotehost:6984/DatabaseToReplicate/

更新: 如果在 _replicator 数据库目标键值中创建的文档从 https 更改为 http,端口号从 6984 更改为 5984,则复制在我的远程数据库中的 https 上使用 6984 端口开始,这是为什么。

我的本​​地和远程 couchdb 配置:

For replicator

connection_timeout           30000
db                          _replicator
http_connections             20
max_replication_retry_count  10
retries_per_request          10
socket_options               [keepalive, true, nodelay, false]
ssl_certificate_max_depth    3
verify_ssl_certificates      false
worker_batch_size            500
worker_processes             4

For httpd

allow_jsonp                  false
authentication_handlers      couch_httpd_oauth, oauth_authentication_handler, couch_httpd_auth, cookie_authentication_handler, couch_httpd_auth, default_authentication_handler
bind_address                 0.0.0.0
default_handler              couch_httpd_db, handle_request
enable_cors                  false
log_max_chunk_size           1000000
port                         5984
secure_rewrites              true
socket_options               [recbuf, 262144, sndbuf, 262144]
vhost_global_handlers        _utils, _uuids, _session, _oauth, _users

For couch_httpd_auth

allow_persistent_cookies     false
auth_cache_size              50
authentication_db            _users
authentication_redirect      /_utils/session.html
iterations                   10
require_valid_user           true
secret                       ***************************
timeout                      600

For couch_httpd_oauth

use_users_db                 false

For ssl

cert_file                    /etc/couchdb/cert/couchdb.pem  
key_file                     /etc/couchdb/cert/privkey.pem
port                         6984
ssl_certificate_max_depth    1
verify_ssl_certificates      false

我的 _users 数据库只包含设计文档。

我的 couchDb 版本是 1.6.1

【问题讨论】:

【参考方案1】:

在您放入/_replicator 的文档中,您有:

"source": "https://adminname:pass@host:6984/DatabaseFromReplicate/",
"target": "https://adminname:pass@host:6984/DatabaseToReplicate/",

对于sourcetarget,您使用的是host,不应该类似于localHost 用于sourceremoteHost 用于target 吗?我的意思是,它们不应该不同吗?

我不确定,也许这只是你的问题中的一个错字。

【讨论】:

是的,这是我的问题中的拼写错误,感谢您指出 @sykyck 我强烈建议使用 CouchDB 2.1.1,因为 1.6.1 版本有 security bugs 允许系统被利用 by bitcoin miners。 感谢您的信息

以上是关于无法使用管理员和自签名 SSL 证书复制 CouchDB 数据库的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发HTTPS实现之信任SSL证书和自签名证书

如何连接 Python IMAP4_SSL 和自签名服务器 SSL 证书?

如何使用 Ionic Cordova 框架和自签名证书绕过 iOS 11 中的 SSL 检查

Python 3.6 SSL - 使用TLSv1.0而不是TLSv1.2密码 - (2路身份验证和自签名证书)

wget、自签名证书和自定义 HTTPS 服务器

为app接口使用https和自签名证书