【发布时间】:2018-03-26 04:24:49
【问题描述】:
我正在尝试在 PHP 中执行 SP 启动的 SAML 2.0 SLO,我的问题是:LogoutResponse 状态代码 AuthnFailed,因此没有 IdP 注销。根据 Okta (IdP) 仪表板,原因是无效签名。 我正在使用 robrichards/xmlseclibs 安全库和 POST 绑定。该请求在https://www.samltool.com/validate_logout_req.php 和http://php.net/manual/en/domdocument.schemavalidate.php 上验证。
这是我的美化要求:
<?xml version="1.0" encoding="utf-8"?>
<samlp:LogoutRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
ID="_logout_1_5ab86804b6057"
Version="2.0"
Destination="https://dev-680804.oktapreview.com/app/catalystitdev680000_xxxx_1/exkeb8o4nbMQ7xxxxxxx/slo/saml"
IssueInstant="2018-03-26T16:24:52+13:00">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://xxxxxxx/</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<ds:Reference>
<ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>5SXEPj5gyXWuf/BXfZ7QTVrUuJaF3Khh...</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>TmAUPHY4rO...</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIFUzCCAzugAwIBAgI...</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">and...</saml:NameID>
<samlp:SessionIndex>_authn_5ab8680105723</samlp:SessionIndex>
</samlp:LogoutRequest>
这就是我创建 pkey 和 crt 的方式:
#!/bin/bash
# https://github.com/mattermost/docs/blob/master/source/scripts/generate-certificates/gencert.md
umask 377
certname="${CRT_FILENAME:-"nzta-x509"}"
openssl x509 \
-in <(
openssl req \
-days 3650 \
-newkey rsa:4096 \
-nodes \
-keyout "${certname}.key" \
-subj "/C=${CRT_C:-"NZ"}/L=${CRT_L:-"Wellington"}/O=${CRT_O:-"XXXX"}/OU=${CRT_OU:-"Sysadmins"}/CN=${CRT_CN:-"xxxx-xxxx"}"
) \
-req \
-signkey "${certname}.key" \
-sha256 \
-days 3650 \
-out "${certname}.crt" \
-extfile <(echo -e "basicConstraints=critical,CA:true,pathlen:0")
chmod 600 ${certname}.crt
我的想法不多了。如何获得更多错误上下文。 “无效签名”对我没有多大帮助......
【问题讨论】: