2017-12-21 37 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の私のインスタンスは、Apacheプロキシの背後で実行されているとGitlabのために使用される証明書はまた、このApacheの上のウェブサイトで使用されてについての私のconfです。

なぜ私のAuthnRequestに署名がないのですか?どこが間違っているのですか?

P.S. :私は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> 
関連する問題