2017-12-21 15 views
0

Ich versuche, SSO auf Gitlab mit SAML 2.0 zu implementieren, und ich habe einige Probleme.AuthnRequest ohne Signatur mit SAML auf Gitlab

Die Manager der IdP in meiner Firma schickten mir ihre Metadatas und folgten der Gitlab Dokumentation über SAML Ich konfigurierte Gitlab so.

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" 
} 
] 

Ich schickte meine Metadatas zum IdP und sie wurden akzeptiert.

<?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> 

Wenn ich versuche, eine Verbindung zu Gitlab mit SSO herzustellen, habe ich einen Fehler. Die Signatur meiner AuthnRequest fehlt. Die Manager von IdP haben mir gesagt, dass das Problem von dem Zertifikat meiner Bewerbung herrührt. hier ist also meine conf über 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" 

Meine Instanz Gitlab hinter einem Apache-Proxy läuft und das Zertifikat für Gitlab verwendet wird, auch für die Website auf diesem Apache verwendet.

Warum habe ich keine Signatur in meinem AuthnRequest? Wo liege ich falsch oder was habe ich vermisst?

P.S. : Ich bin sehr neu zu SAML und Gitlab Konfiguration, so dass ich wahrscheinlich etwas offensichtlich verpasst habe

Antwort

0

Sie benötigen Zertifikat und einen privaten Schlüssel in die Gitlab Parameter hinzuzufügen. Außerdem müssen Sie die Sicherheitsparameter angeben, um die Generierung der Signatur zu ermöglichen.

Dies ist ein Beispiel:

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

Vielen Dank Bart, es perfekt funktioniert jetzt. – Shannow

0

Es gibt keine Signaturen in AuthnRequest nach meiner Kenntnis und Erfahrung. Die Signierung oder Verschlüsselung beginnt bei den nächsten HTTP-Anfragen.

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

Was und wo sind Sie Fehler, wenn eine zu bekommen?

(Beispiel) AuthnRequest keine Signaturen haben:

<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> 
Verwandte Themen