我有一个关于使用 SSL 证书构建身份验证系统的问题。我的想法是将数据存储在数据库中(我知道该怎么做),当用户提供证书时,系统会检查证书值并知道将用户放在哪里。但是有些事情不是很清楚(我可能听起来很笨,但不要评判我)
- 如何用PHP制作证书?
- 如何使系统向客户端请求特定的详细信息?(与 StartSSL 一样)
- 我必须签署私人证书吗?
PS:如果这有什么不同,我正在使用 HostGator 商业计划。我已要求他们颁发私人 ssl 证书。
我从未使用过 StartSSL,但是现在许多个人和公司都使用 SSL API 和身份验证,例如新的(ish)Facebook sdk。
请注意,许多浏览器和其他软件不支持将自签名证书作为有效的安全机制。
您不能在 PHP 中制作 SSL 证书,而是必须使用 OpenSSL 等工具制作。这是我在 Google 上找到的简短教程:http ://www.akadia.com/services/ssh_test_certificate.html 。
SSL 主要旨在使跨线路的数据传输更加安全,并且在通过 PHP 读取连接时,您将验证证书以查看它是否与应有的证书匹配(http://stackoverflow.com/questions /3081042/how-to-get-ssl-certificate-info-with-curl-in-php)很像浏览器如何下载站点 SSL 证书,然后使用它来创建安全连接。我不会想象您会为每个用户提供一个证书。
在此之后,您的所有数据都通过 HTTPS 而不是允许 SSL 身份验证的 HTTP。
根据 SSL 身份验证系统,如果它是 API,那么您的 cURL 请求将通过 HTTPS 而不是 HTTP 发送。
如果您正在为网站上的登录页面制作此内容,那么它比我上面所说的要简单得多(理论上,您仍然可以搞砸很多事情)。如果您这样做,那么您只需将 SSL 证书添加到您的服务器,然后将其添加到您的服务器配置(Google 的另一个 Apache 快速教程:http ://www.digicert.com/ssl-certificate-installation-apache .htm),然后像往常一样将用户重定向到登录页面的 https 和登录处理页面(确保你有一个vhost
for443
如果你在 Apache 中)。
编辑:Openssl 确实有一个 PHP API,因为我刚刚记得所以我错了。
这就是我看到 SSL 身份验证失败的方式。
1) 使用 PHP 创建新 SSL 证书的方法^
$dn = array(
"countryName" => 'Country',
"organizationName" => 'Org',
"commonName" => 'Common name',
"emailAddress" => 'email@email.com',
);
$configArgs = array(
'digest_alg' => 'SHA1',
);
$clientKey = openssl_pkey_new();
$csr = openssl_csr_new($dn, $clientKey, $configArgs);
$password = trim(base64_encode(openssl_random_pseudo_bytes(8)), '/=');
$cert = openssl_csr_sign(
$csr,
'file:///etc/ssl/ca/ca.pem',
'file:///etc/ssl/ca/ca.pem',
1095,
$configArgs,
$serial
);
openssl_pkcs12_export($cert, $clientCertPkcs12, $clientKey, $password);
openssl_x509_free($cert);
$sslData = array(
'serial' => $serial, // random serial
'sslkey' => $password,
'created_at' => time(),
'sslpfx' => $clientCertPkcs12
);
openssl_pkey_free($clientKey);