2017-12-21 7 views
0

SAML 2.0을 사용하여 Gitlab에서 SSO를 구현하려고하는데 몇 가지 문제가 있습니다.Gitlab에서 SAML을 사용하는 서명이없는 AuthnRequest

우리 회사의 IdP 관리자는 메타 데이터를 보내고 SAML에 대한 Gitlab 설명서를 읽고 Gitlab을 이와 같이 구성했습니다.

gitlab_rails['omniauth_enabled'] = true 
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml'] 
gitlab_rails['omniauth_block_auto_created_users'] = true 
gitlab_rails['omniauth_auto_link_ldap_user'] = false 
gitlab_rails['omniauth_auto_link_saml_user'] = false 

gitlab_rails['omniauth_providers'] = 
[ 
    { 
name: "saml", 
args: 
{ 
assertion_consumer_service_url: "https://my.domain.com/gitlab/auth/saml/callback", 
idp_cert: " 
-----BEGIN CERTIFICATE----- 
IDP_Certificate 
-----END CERTIFICATE----- 
", 
idp_sso_target_url: "https://my_idp_target_URL", 
issuer: "sp-gitlab", 
name_identifier_format: "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", 

}, 
label: "SSO" 
} 
] 

나는 자신의 메타 데이타를 IdP에 보내어 받아 들였다.

<?xml version="1.0"?> 
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" validUntil="2017-11-22T09:24:33Z" ID="_1910909d-5325-4cba-a56f-4f9082e05e24" entityID="sp-gitlab"> 
    <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> 
    <md:KeyDescriptor use="signing"> 
     <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
     <ds:X509Data> 
      <ds:X509Certificate> 
      My cert 
</ds:X509Certificate> 
     </ds:X509Data> 
     </ds:KeyInfo> 
    </md:KeyDescriptor> 
    <md:KeyDescriptor use="encryption"> 
     <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
     <ds:X509Data> 
      <ds:X509Certificate> 
      Mycert 
    </ds:X509Certificate> 
     </ds:X509Data> 
     </ds:KeyInfo> 
    </md:KeyDescriptor> 
     <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat> 
     <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://my.domain.com/gitlab/auth/saml/callback" index="0" isDefault="true"/> 
     <md:AttributeConsumingService index="1" isDefault="true"> 
      <md:ServiceName xml:lang="en">Required attributes</md:ServiceName> 
      <md:RequestedAttribute FriendlyName="Email address" Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/> 
      <md:RequestedAttribute FriendlyName="Full name" Name="name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/> 
      <md:RequestedAttribute FriendlyName="Given name" Name="first_name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/> 
      <md:RequestedAttribute FriendlyName="Family name" Name="last_name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"/> 
     </md:AttributeConsumingService> 
    </md:SPSSODescriptor> 
</md:EntityDescriptor> 

SSO를 사용하여 Gitlab에 연결하려고하면 오류가 있습니다. 내 AuthnRequest의 서명이 없습니다. IdP의 관리자는 내 응용 프로그램의 인증서에서 문제가 발생했다고 말했습니다. 그래서 여기 Gitlab HTTPS

nginx['redirect_http_to_https'] = true 
nginx['redirect_http_to_https_port'] = 443 
... 
nginx['ssl_certificate'] = "/etc/gitlab/ssl/prod.cer" 
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/prod.key" 

Gitlab 내 인스턴스가 아파치 프록시 뒤에 실행 및 Gitlab에 사용되는 인증서가이 아파치의 웹 사이트 사용에 대한 내 conf의입니다.

그렇다면 왜 AuthnRequest에 서명이 없습니까? 내가 잘못했거나 놓친 부분은 어디입니까?

P. : 나는 SAML과 Gitlab Configuration에 익숙하지 않으므로 확실한 것을 놓친 것 같습니다.

답변

0

당신은 gitlab 매개 변수로 인증서와 개인 키를 추가해야합니다. 또한 서명을 생성 할 수 있도록 보안 매개 변수를 지정해야합니다. 많은 바트, 지금 완벽하게 작동

gitlab_rails['omniauth_auto_sign_in_with_provider'] = 'saml' 
gitlab_rails['omniauth_block_auto_created_users'] = false 
gitlab_rails['omniauth_auto_link_saml_user'] = true 
gitlab_rails['omniauth_providers'] = [ 
    { 
     name: 'saml', 
     args: { 
      assertion_consumer_service_url: 'https://mywebsite/users/auth/saml/callback', 
      assertion_consumer_service_binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST', 
      idp_cert_fingerprint: '77:EE:EE:AA:67:FA:78:4C:E2:ED:E8:57:AC:EE:AC:AB:AA:FF:FD:FD', 
      idp_sso_target_url: 'https://idp.url/auth/SSOPOST/metaAlias/ent/providerIDP', 
      idp_sso_target_binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST', 
      idp_slo_target_url: 'https://idp.url/auth/IDPSloPOST/metaAlias/ent/providerIDP', 
      idp_slo_target_binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST', 
      sso_binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST', 
      protocol_binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST', 
      issuer: 'sp_gitlab', 
      name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', 
      certificate: "-----BEGIN CERTIFICATE----- 
MIIDzjCCArYCCQCxUOzAVm5w3DANBgkqhkiG9w0BAQUFADCBqDELMAkGA1UEBhMC 
.... 
v84ULsyAgv8sVJ4XerZ9wr7B 
-----END CERTIFICATE-----", 
      private_key: "-----BEGIN RSA PRIVATE KEY----- 
MIIEpQIBAAKCAQEAxcTsJ0sBMAH9NwEvDT5qcGBA6JiChtM90I9di7YC98lO5qFM 
.... 
lfIj9QAaFdL9lPskg6zX6HEooOEoLib8fm9IZCIChjhsdjoj/6QXP6k= 
-----END RSA PRIVATE KEY-----", 
      security: { 
       authn_requests_signed: true, 
       embed_sign: true, 
       digest_method: "XMLSecurity::Document::SHA1", 
       signature_method: "http://www.w3.org/2000/09/xmldsig#rsa-sha1" 
      } 
     }, 
     label: 'SAML Auth' 
    } 
] 
+0

감사 :

는 샘플입니다. – Shannow

0

내 지식과 경험에 따라 AuthnRequest에 서명이 없습니다. 다음 HTTP 요청에서 서명 또는 암호화가 시작됩니다.

참조 : https://en.wikipedia.org/wiki/SAML_2.0#Authentication_Request_Protocol

무엇 당신이 점점 오류가있는 경우?

(예) Authnrequest는 서명을하지 않습니다

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
        xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" 
        ID="_a976498d2ebe858cc56d486b5af2085ed957f45c5a" 
        Version="2.0" 
        IssueInstant="2017-08-10T13:29:09Z" 
        Destination="https://<idp_url>/idp/profile/SAML2/Redirect/SSO" 
        AssertionConsumerServiceURL="https://<mahara_adress>/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp" 
        ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
        > 
    <saml:Issuer>https://<mahara_adress>/mahara</saml:Issuer> 
</samlp:AuthnRequest> 
관련 문제