Symfony IDP - ошибка подписи openssl EVP_DecryptFinal_ex: плохая расшифровка - SHA256 - PullRequest
0 голосов
/ 10 мая 2019

У меня проблема с сертификатами, я думаю.Я настроил свой idp и протестировал его с https://samltest.id/start-idp-test/. Я использую Symfony 3.4 с этим комплектом для создания idp.

Теперь я хочу добавить talentlms .Я создал самозаверяющий сертификат на сервере с помощью следующей команды:

openssl req -new -x509 -sha256 -newkey rsa: 4096 -nodes -keyout key.pem -out cert.pem-days 365

Я поместил файлы в app / Resources / saml_keys / и добавил этот путь в конфигурации:

public_key: '%kernel.root_dir%/Resources/saml_keys/cert.pem'
private_key: '%kernel.root_dir%/Resources/saml_keys/key.pem'

Я добавил публичный сертификат вмой профиль talentlms.Если я проверю от talentlms, я буду перенаправлен на мою страницу входа и могу войти.После входа в систему я получаю эту ошибку перед перенаправлением:

app.NOTICE: Authentication succeed [] []
security.INFO: User has been authenticated successfully. {"username":"xxxxxx@xxxxx.de"} []
app.NOTICE: Continue SSO process [] []

request.CRITICAL: Uncaught PHP Exception Exception: "Failure Signing Data: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt - SHA256" at /var/www/vhosts/xxxxxx.de/idp.xxxxx.de/vendor/robrichards/xmlseclibs/src/XMLSecurityKey.php line 464 {"exception":"[object] (Exception(code: 0): Failure Signing Data: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt - SHA256 at /var/www/vhosts/xxxx.de/idp.xxxxx.de/vendor/robrichards/xmlseclibs/src/XMLSecurityKey.php:464)"}

Так в чем проблема?Неправильно ли создан сертификат?

Вот моя конфигурация SP, как описано в комплекте:

$this->spMap["xxxxxx.talentlms.com"] = new ServiceProvider(
            [
                /**
                 * Returns the contents of an X509 pem certificate, without the '-----BEGIN CERTIFICATE-----' and
                 * '-----END CERTIFICATE-----'.
                 *
                 * @return null|string
                 */
                'certificateData' => '',

                /**
                 * Returns the full path to the (local) file that contains the X509 pem certificate.
                 *
                 * @return null|string
                 */
                "certificateFile" => $this->rootDir . '/Resources/saml_keys/cert.pem',

                /**
                 * @return null|string
                 */
//                "entityId" => "https://xxxxx.talentlms.com/simplesaml/module.php/saml/sp/metadata.php/xxxxx.talentlms.com",
                "entityId" => "xxxxx.talentlms.com",

                /**
                 * @return null|bool
                 */
                "assertionEncryptionEnabled" => true,

                "assertionConsumerUrl" => "https://xxxxx.talentlms.com/simplesaml/module.php/saml/sp/saml2-acs.php/xxxxxx.talentlms.com",
                "assertionConsumerBinding" => \SAML2_Const::BINDING_HTTP_POST,
                "singleLogoutUrl" => "https://xxxxx.talentlms.com/simplesaml/module.php/saml/sp/saml2-logout.php/xxxxxx.talentlms.com",
                "singleLogoutBinding" => \SAML2_Const::BINDING_HTTP_REDIRECT,
                "nameIdFormat" => \SAML2_Const::NAMEID_PERSISTENT,
                "nameIdValue" => function (UserInterface $user) {
                    /** @var Member $user */
                    return $user->getEmail();
                },
                "NameQualifier" => 'xxxxx.talentlms.com',
                "wantSignedAuthnRequest" => false,
                "wantSignedAuthnResponse" => true,
                "wantSignedAssertions" => true,
                "wantSignedLogoutRequest" => false,
                "wantSignedLogoutResponse" => false,
                "attributes" => [
                    'targetedID' => function (UserInterface $user) {
                        /** @var Member $user */
                        return $user->getEmail();
                    },
                    'email' => function (UserInterface $user) {
                        /** @var Member $user */
                        return $user->getEmail();
                    },
                    'firstname' => function (UserInterface $user) {
                        /** @var Member $user */
                        return $user->getFirstName();
                    },
                    'lastname' => function (UserInterface $user) {
                        /** @var Member $user */
                        return $user->getLastName();
                    },
                ],
                "assertionNotBeforeInterval" => new \DateInterval('PT0S'),
                "assertionNotOnOrAfterInterval" => new \DateInterval('PT5M'),
                "assertionSessionNotOnOrAfterInterval" => new \DateInterval('P1D'),
            ]
        );

Я ожидал перенаправления обратно в talentlms.

1 Ответ

0 голосов
/ 13 мая 2019

Я нашел проблему. На моем сервере я не могу использовать флаг -sha256. Моя новая команда openssl openssl req -x509 -nodes -newkey rsa:4096 -keyout key_4096.pem -out cert_4096.pem -days 3655

На talentlms мне нужно было поместить файл сертификата в конфиг. Сгенерированный хэш также был неверным, потому что talentlms не сохраняет сертификат правильно. Я добавил сгенерированный хэш sha1 самостоятельно, и он сработал.

...