0

我有一个关于使用 SSL 证书构建身份验证系统的问题。我的想法是将数据存储在数据库中(我知道该怎么做),当用户提供证书时,系统会检查证书值并知道将用户放在哪里。但是有些事情不是很清楚(我可能听起来很笨,但不要评判我)

  1. 如何用PHP制作证书?
  2. 如何使系统向客户端请求特定的详细信息?(与 StartSSL 一样)
  3. 我必须签署私人证书吗?

PS:如果这有什么不同,我正在使用 HostGator 商业计划。我已要求他们颁发私人 ssl 证书。

4

2 回答 2

1

我从未使用过 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 和登录处理页面(确保你有一个vhostfor443如果你在 Apache 中)。

编辑:Openssl 确实有一个 PHP API,因为我刚刚记得所以我错了。

这就是我看到 SSL 身份验证失败的方式。

于 2012-07-31T08:29:18.847 回答
0

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);
于 2012-07-31T09:08:01.603 回答