不确定问题是否应该在ServerFault上?
我使用Apache credentials在我的服务器上设置了couchDB(但如果分散注意力,我可以将其关闭)。
我在各种笔记本电脑上都有本地实例。现在我想设置安全(连续)复制。根据我的理解,我可以使用用户名/密码,SSL证书或OAuth。我发现了一些信息:
所有这些文件都增加了预感,但也引起了混乱(我只是simple mind)。
我正在寻找的是一步一步的指导:
我在哪里可以找到它?
答案 0 :(得分:5)
安全传输用户凭据是一个非常棘手的问题。
如果我们不想第三方,在大多数情况下,SSL是更好的开始方式,因为它可能会被您使用的每个工具广泛支持。 SSL证书,不仅提供加密(甚至是自签名的加密),还提供用户请求正确资源的保险。如果您关心服务器安全性,最后一个选项也值得强调。 SSL使用的主要缺点是性能下降(因使用的算法而异),因为服务器必须解密数据,并且除了常见的通信例程之外,客户端还需要验证证书。此外,您还需要为可信证书(not always true)支付一些费用。
使用OAuth可以不泄露真实的用户凭据,并且可以轻松地从服务器端维护其访问控制。此外,您需要一些能够正确处理OAuth 1.0规范的库,如果您的平台错过了 - 您必须自己实现它。另外OAuth提供传输数据签名,因此它旨在为MiTM案例提供安全保障。这实际上就是他所做的一切。
如您所知,SSL和OAuth有两个不同的东西:SSL有助于加密传输级别(TLS)上的数据,而OAuth负责在非安全环境中进行凭据泄露。它们不是彼此的替代品,但是它们中的每一个都可以与其他产品一样好。
要为CouchDB设置SSL支持,请按照documentation guide进行操作。这很简单易行。请注意,如果CouchDB前面有一些代理服务器,那么为他设置SSL并通过常规HTTP协议将代理数据代理到本地CouchDB实例可能是明智的。
要设置OAuth,需要执行后续步骤:
0.确保{couch_httpd_oauth, oauth_authentication_handler}
配置文件的authentication_handlers
部分的[httpd]
选项存在default.ini
处理程序:
[httpd的] authentication_handlers = {couch_httpd_oauth,oauth_authentication_handler},{couch_httpd_auth,cookie_authentication_handler},{couch_httpd_auth,default_authentication_handler}
之后,您需要以下一种方式编辑local.ini
文件:
[oauth_consumer_secrets]
example.org = sekr1t
[oauth_token_secrets]
token1 = tokensekr1t
[oauth_token_users]
token1 = joe
这就是全部!如果您有CouchDB 1.2或更高版本,您还可以在_users
数据库中的用户文档中定义OAuth凭据:
{
"_id": "org.couchdb.user:joe",
"type": "user",
"name": "joe",
"password_sha": "fe95df1ca59a9b567bdca5cbaf8412abd6e06121",
"salt": "4e170ffeb6f34daecfd814dfb4001a73"
"roles": ["foo", "bar"],
"oauth": {
"consumer_keys": {
"example.org": "sekr1t",
"consumerKey2": "key2Secret"
},
"tokens": {
"token1": "tokensekr1t",
"token2": "token2Secret"
}
}
}
现在,当我们为用户 joe 设置OAuth凭据时,让我们开始复制。要让CouchDB使用OAuth凭据,我们需要扩展source
或target
个字段,具体取决于哪一方授权我们的用户:
{
"source": "mailbox",
"target": {
"url": "https://secure.example.org/mailbox",
"auth": {
"oauth": {
"consumer_secret": "sekr1t",
"consumer_key": "example.org",
"token_secret": "tokensekr1t",
"token": "token1"
}
}
}
}
和POST
此数据到_replicate
资源或为_replicator
数据库创建文档。复制将使用SSL协议加密从本地服务器启动到远程secure.example.org
,所有操作都将通过登录joe
进行远程用户操作。
总结:SSL和OAuth的组合不仅可以保护传输的数据(不仅是用户凭据),还可以保证目标服务器不会被伪造,还可以保护真实用户登录名和密码免于意外泄露,控制消费者来源(例如如果example.org
将被泄露,我们只能删除他的消费者令牌,但不能强迫用户更改他的密码)并签署针对MiTM攻击的额外保护请求。
更新:对于您的情况,常规SSL证书例程是可以的:您需要创建自己签名的个人证书,并让客户设置以便进一步使用CouchDB。 CouchDB方面唯一需要的是在处理连接之前验证证书。但请注意,自定义个人SSL证书安装可能是not trivial,尤其适用于移动客户端。
对于OAuth方面,CouchDB 可以使用RSA-SHA1 auth方法,该方法使用某种个人证书进行保密。但是,您需要首先修补源以解锁此方法 - 默认情况下禁用它。