2013-02-28 71 views
4

不确定问题是否应该在ServerFault安全复制的分步说明?

我在我的服务器上使用Apache credentials设置了一个couchDB设置(但如果它是一个分心,我可以关闭它)。
我在各种笔记本电脑上都有本地实例。现在我想设置安全(连续)复制。根据我的理解,我可以使用用户名/密码,SSL证书或OAuth。我发现的信息,点点滴滴:

所有这些文件添加一种预感,也困惑(我只是一个simple mind)。

我正在寻找的是一个一步一步的指令:

  • 正反对OAuth的或SSL证书(可选讨论)
  • 步骤设置SSL组件澄清:我m没有寻找SSL传输安全性 - 这对于Apache HTTP和CouchDB都不是很复杂并很好的记录。我正在寻找的认证使用证书,类似于您可以在SSH中执行的操作。我使用OAuth看到的潜在问题:管理员可以完全访问凭据(?)。使用证书方法,他不能模拟用户,因为私钥不在管理员控制之下。
  • 步骤设置OAuth的
  • 样品复制文件为每个用户使用一个本地副本有一些文件和共享一个ONELINE

我在哪里能找到?

+0

**澄清**:我不是在寻找SSL传输安全性 - 对于[Apache HTTP](http://httpd.apache.org/docs/2.2/ssl/ssl_faq) .html)和CouchDB。我正在寻找的是使用证书进行**身份验证,类似于您可以在SSH中执行的操作。我使用OAuth看到的潜在问题:管理员可以完全访问凭据(?)。使用证书方法,他不能模拟用户,因为私钥不在管理员控制之下。 – stwissel 2013-02-28 16:31:21

回答

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文件在明年方式:

  1. 设置消费的秘密:
[oauth_consumer_secrets] 
example.org = sekr1t 
  1. 设置令牌的秘密:
[oauth_token_secrets] 
token1 = tokensekr1t 
  1. 地图标记来存在的CouchDB的用户:
[oauth_token_users] 
token1 = joe 

就这样!如果你的CouchDB 1.2或更高版本,你也可以定义用户文档中OAuth认证,内部_users数据库:

{ 
    "_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" 
     } 
    } 
} 

现在,当我们最好设置OAuth认证,为我们的用户,让我们开始我们的复制。为了让CouchDB的使用OAuth认证,我们需要扩大sourcetarget领域,这取决于哪一方将授权我们的用户:

{ 
    "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攻击的额外保护。

UPDATE:为了您的情况,常规的SSL证书例程可以使用:您需要创建由您自己签名的个人证书,并让客户端为您的CouchDB进一步开展工作。从CouchDB方面唯一需要的是在处理连接之前验证证书。但请注意,该定制个人SSL证书安装可能是not trivial,尤其对于移动客户端。

说到OAuth端,CouchDB 可能使用使用RSA-SHA1身份验证方法,它使用某种个人证书作为秘密。但是,您需要首先修补源以解锁此方法 - 默认情况下它是禁用的。

+0

Thx的解释。抱歉不清楚。我并没有将SSL搞混传输安全(我知道该怎么做),但SSL证书进行身份验证(couchDB似乎有一个选项)。可能“SSL证书”具有误导性,应该称为“X509证书”。该方法似乎与SSH类似,您可以使用证书而不是用户名/密码 – stwissel 2013-02-28 16:21:12

+0

@stwissel对于迟到的回复感到抱歉!我已经更新了你的说明。 – Kxepal 2013-03-06 09:54:19

+0

Thx用于更新。 SSLCerts当然非常有趣!我会问(在适当的时候)关于RSA-SHA1的另一个问题。在开放的所有令牌和秘密中,现在是好的,但可能无法在secaudit中生存 – stwissel 2013-03-06 15:37:59