2013-02-28 2 views
4

질문이 오히려 ServerFault에 있어야하는지 확실하지 않은가요?안전한 복제를위한 단계별 지침?

Apache credentials을 사용하여 내 서버에 couchDB 설정이 있습니다 (하지만 혼란 스럽다면 스위치를 켤 수 있습니다).
다양한 랩톱에 로컬 인스턴스가 있습니다. 이제 보안 (연속) 복제를 설정하고 싶습니다. 내 이해에서 사용자 이름/암호, SSL 인증서 또는 OAuth를 사용할 수 있습니다.

이 모든 문서는 직감을 추가 위키

  • SSL Question on serverFault
  • the WIKI entry on replication
  • how to on replication뿐만 아니라 혼란 : 나는 정보의 비트와 조각을 발견 (난 단지 simple mind입니다).

    내가 찾고 단계 명령에 의해 단계는 다음과 같습니다

    • 프로와의 OAuth 또는 SSL 인증서 (선택 사항 토론) 설정에
    • 단계는 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

    답변

    5

    사용자 자격 증명의 안전한 전송은 매우 민감한 질문입니다.

    우리가 제 3자를 보지 않는다면, 대부분의 경우 SSL은 사용하는 모든 도구에 대한 광범위한 지원을하기 때문에 시작하는 것이 더 좋습니다. SSL 인증서는 암호화 (자체 서명 된 것조차도)뿐만 아니라 사용자가 올바른 리소스를 요청했다는 보험을 제공합니다. 마지막 옵션은 서버 보안에 관심이 있다면 강조 할 가치가 있습니다. SSL 사용의 주요 단점은 성능 저하 (사용 된 알고리즘에 따라 다름)입니다. 서버가 데이터를 해독해야하고 클라이언트가 일반적인 통신 루틴에 추가로 인증서의 유효성을 검사해야하기 때문입니다. 또한 신뢰할 수있는 인증서 (not always true)를 얻기 위해 돈을 지불해야합니다.

    OAuth를 사용하면 실제 사용자 자격 증명을 공개하지 않고 서버 측에서 쉽게 액세스 제어를 유지할 수 있습니다. 또한 OAuth 1.0 사양을 제대로 처리하는 라이브러리가 필요하며 플랫폼에서 이러한 기능을 구현하지 못하면 직접 구현해야합니다. 추가 OAuth에서는 전송 데이터 서명을 제공하므로 MiTM의 경우 안전을 목표로합니다. 그것은 실제로 그가하는 모든 것입니다.

    참고로 SSL과 OAuth는 약 두 가지가 있습니다. SSL은 전송 레벨 (TLS)의 데이터를 암호화하는 데 도움이되는 반면 OAuth는 비보안 환경의 인증서 공개를 처리합니다. 그것들은 서로를 대신 할 수는 없지만, 각각은 다른 것에 보탬이 될 수 있습니다.

    CouchDB에 대한 SSL 지원을 설정하려면 documentation guide을 따르십시오. 아주 간단하고 쉽게 할 수 있습니다. CouchDB 앞에 프록시 서버가있는 경우 일반 HTTP 프로토콜을 통해 로컬 CouchDB 인스턴스에 프록시 데이터를 설정하는 것이 좋습니다. ,

    [아파치] authentication_handlers = {couch_httpd_oauth, oauth_authentication_handler} : 0이 {couch_httpd_oauth, oauth_authentication_handler} 핸들러가 default.ini 설정 파일에 대한 [httpd] 섹션의 authentication_handlers 옵션에 존재하는 것을 확인합니다

    는 설정 OAuth를하려면 다음 단계를 만들기 위해이 필요 {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를 사용자가 존재3210
      [oauth_token_users] 
      token1 = joe 
      

      그게 전부입니다! 우리는 우리의 사용자 에 대한 설정의 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" 
           } 
          } 
      } 
      

      을의 우리의 복제를 시작하자 : 당신이 CouchDB를 버전 1.2 이상이있는 경우, 당신은 또한 _users 데이터베이스 내부 사용자의 문서 내에서의 OAuth 인증 정보를 정의 할 수 있습니다. _replicate 자원

      { 
          "source": "mailbox", 
          "target": { 
           "url": "https://secure.example.org/mailbox", 
           "auth": { 
            "oauth": { 
             "consumer_secret": "sekr1t", 
             "consumer_key": "example.org", 
             "token_secret": "tokensekr1t", 
             "token": "token1" 
            } 
           } 
          } 
      } 
      

      POST이 데이터를하거나 _replicator 데이터베이스에 대한 문서를 만들 : CouchDB를 사용하여 OAuth 인증을하도록하려면, 우리는 우리의 사용자에게 권한을 부여 할 측면에 따라, source 또는 target 필드를 확장해야합니다. SSL 프로토콜 암호화를 사용하여 로컬 서버에서 원격 secure.example.org으로 복제가 시작되며 로그인은 joe 인 원격 사용자에 대한 모든 작업이 수행됩니다.

      요약 : SSL (Secure Socket Layer)과 OAuth의 결합으로 사용자 자격 증명뿐만 아니라 전송 된 데이터를 보호하고 대상 서버가 위조되지 않았 음을 확인하고 실제 사용자 로그인 이름과 암호를 우발적 인 노출로부터 보호하고, 예를 들어 example.org이 유출 될 경우 소비자 토큰을 삭제할 수는 있지만 사용자가 암호를 변경하도록 강요 할 수는 없으며 MiTM 공격에 대한 추가 보호 요청에 서명 할 수 있습니다.

      업데이트 : : 귀하의 경우 일반 SSL 인증서 루틴은 정상입니다 : 귀하가 직접 서명 한 개인 인증서를 작성하고 CouchDB와의 추가 작업을 위해 클라이언트를 설정해야합니다. CouchDB 측에서 요구되는 유일한 것은 연결을 처리하기 전에 인증서의 유효성을 검사하는 것이다. 그러나 사용자 지정 개인 SSL 인증서 설치는 특히 모바일 클라이언트의 경우 not trivial 일 수 있습니다.

      CouchDB 은 비밀을위한 일종의 개인 인증서를 사용하는 RSA-SHA1 인증 방법을 사용합니다. 그러나이 방법의 잠금을 해제하려면 먼저 소스를 패치해야합니다. 기본적으로 비활성화되어 있습니다.

    +0

    Thx. 그리고 명확하지 않은 것을 유감스럽게 생각합니다. 나는 SSL (transport security)에 대해 혼란스럽지 않지만 인증을위한 SSL 인증서 (couchDB 옵션이있는 것으로 보인다)를 혼동하지 않습니다. 아마도 "SSL 인증서"는 오해의 소지가 있으며 "X509 cert or so"라고해야합니다. 이 접근법은 SSH와 유사하지만 사용자 이름/암호 대신 인증서를 사용할 수 있습니다. – stwissel

    +0

    @stwissel 늦게 답변드립니다. 당신의 설명에 대한 업데이트를했습니다. – Kxepal

    +0

    업데이트 Thx. SSLCerts는 확실히 재미 있습니다! 나는 RSA-SHA1에 대해 다른 질문을한다. 모든 토큰과 비밀을 open에 저장하는 것은 괜찮지 만, 보안을 유지할 수는 없습니다. – stwissel