Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP、MySQL和SSL身份验证_Php_Security_Ssl - Fatal编程技术网

PHP、MySQL和SSL身份验证

PHP、MySQL和SSL身份验证,php,security,ssl,Php,Security,Ssl,我有一个关于使用SSL证书构建身份验证系统的问题。我的想法是将数据存储在数据库中(我知道怎么做),当用户给证书时,系统会检查证书值并知道将用户放在哪里。但有些事情还不太清楚(我可能听起来很傻,但不要评判我) 如何用PHP制作证书 如何使系统向客户端请求特定的详细信息?(如StartSSL上所示) 我必须在私人证书上签字吗 附言:如果这有什么不同的话,我正在使用HostGator商业计划书。我已经要求他们颁发私有ssl证书。我从未使用过StartSSL,但许多个人和公司现在都使用ssl API和a

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

  • 如何用PHP制作证书
  • 如何使系统向客户端请求特定的详细信息?(如StartSSL上所示)
  • 我必须在私人证书上签字吗

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

    我从未使用过StartSSL,但许多个人和公司现在都使用ssl API和auth,比如新的(ish)Facebook sdk

    注意许多浏览器和其他软件不支持将自签名证书作为有效的安全机制

    您不能在PHP中生成SSL证书,而是必须使用类似OpenSSL的工具生成SSL证书。下面是我在谷歌上找到的一个简短教程:

    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快速教程:)中,然后按照您通常将用户重定向到登录页面和登录处理页面的https的方式进行操作(如果您在Apache中,请确保为
    443
    提供
    vhost

    编辑:正如我刚刚记得的那样,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);
    

    如果我用有效的CA签署证书怎么办?openssl_csr_sign();需要CA如果我有并且我有=D证书是否有效?@D.Dimitrov确实,如果证书由有效的提供商签名,它将被视为有效,只有在您自行签名时才会出现问题。@D.Dimitrov因此,要回答
    我必须签名私人证书还是什么?
    否,你可以让你的CA签名。所以我必须用网站证书颁发者的CA.cert来签名,否则只要是用有效的CA?@D.Dimitrov签名就无所谓了,只要是由授权的人签名就行了,所以如果你认为你的主机提供商更便宜,一定要货比三家(激活证书的人)正在欺骗你。虽然他们激活证书可能包括签名,但请与他们核实,你可能一箭双雕。