PHP:从证书中获取公钥ID


PHP: Get public key ID from certificate.

我正在建立一个网站,我需要一个用户登录的名称,密码和证书。它的工作方式应该是在您第一次登录时上传证书。之后,应该有一个包含公钥ID(而不是公钥)、名称和密码的cookie集,以便将来不再需要上传证书。

我对此有麻烦,特别是获得公钥ID。我可以抓取密钥,没问题,但我需要做的是抓取公钥ID并将其保存为cookie,然后与用户名和密码一起保存到DB。

下面是我提交表单的代码:

<?php
    $uploads_dir = '/home/path/to/certs/';
    $uploadfile = $uploads_dir . basename($_FILES['cert']['name']);
    if (move_uploaded_file($_FILES['cert']['tmp_name'], $uploadfile)) {
         $name = './'. $_FILES['cert']['name'];
         $pub_key = openssl_pkey_get_public(file_get_contents($name));
         $keyData = openssl_pkey_get_details($pub_key);   
         echo $keyData['key'];
    } else {
         echo "Nope!'n";
    }
 ?>

之后应该有一个cookie集,其中包含公钥ID(而不是(公开密钥)以及名称和密码,以便将来您没有不再需要上传证书。

本质上,您正在实现一个根本不提供安全性的身份验证系统。

无论您称之为"公钥ID"的是什么,本质上都将是public。因为任何人都可以设置那个cookie,你实际上并没有验证任何东西。

如果希望使用证书中的公钥进行身份验证,请使用客户端-证书身份验证。您可以禁用PKI验证,而使用手动验证证书中的公钥,例如