【发布时间】:2013-11-01 13:04:29
【问题描述】:
我是 SSL 证书的新手。所以对我到目前为止所做的事情有点谨慎。 我正在创建一个使用 SSO 对使用 PHP 5.4 的用户进行身份验证的应用程序。 我拥有的: 一方提供的证书(.pfx)。 POST 变量中的加密 SAML。
解密后的xml和SAML: Why is the certificate within the Signature?差不多
我需要验证响应是否来自经过验证的提供商。我在谷歌搜索时知道我需要 .pem 而不是 .pfx,因此我使用 ssl 命令将 .pfx 文件转换为 .pem。我使用了来自http://www.php.net/manual/es/function.openssl-verify.php#62526 的代码。这是我的代码。
$encxml=$_POST['SAMLResponse'];
$xml = new SimpleXMLElement(base64_decode($encxml));
$signature = ((string)$xml->Signature->SignatureValue);
var_dump($signature);
//do I need to do something with this X509Certificate value embedded in xml??
$cert = ((string)$xml->Signature->KeyInfo->X509Data->X509Certificate);
var_dump($cert);
//Or I need
$fp = fopen("xyz.pem", "r");
$priv_key = fread($fp, 8192);
fclose($fp);
print_r($priv_key);
$ok = openssl_verify($xml, $signature, $priv_key);
那么我应该忽略嵌入在 xml 中的 X509Certificate 还是我也需要检查它... openssl_verify 就足够了吗?我在正确的道路上吗?请任何指导将不胜感激。
【问题讨论】:
-
这个问题很老了......但仍然存在......任何专家的意见将不胜感激。
-
不要尝试自己实现 SAML 堆栈,而是使用现有的库/工具包/产品
标签: php ssl ssl-certificate saml