【问题标题】:Creating public key certificates with a pre-existing public key value使用预先存在的公钥值创建公钥证书
【发布时间】:2013-01-29 11:59:06
【问题描述】:

我只是想知道如何使用 php 创建一个只有预先计算的公钥值的公钥证书。一旦我输入了公钥和剩余值,我将使用我自己的 ca 证书签署这个证书。谢谢!

【问题讨论】:

  • 我不认为这可以通过证书的性质来完成。您不能使用预先存在的公钥,否则人们可能会欺骗您的身份...
  • 这似乎是一个两步的过程,所以目前,我还没有找到足够的尝试。所有的 openssl 证书也需要创建私钥。然而,这是在公钥基础设施中完成的,我将公钥与分别保存在服务器和客户端上的私钥分开。
  • IIRC 这就是证书签名请求 [CSR] 的用途。
  • 对,这就是 openssl 所做的,但是如何仅使用公钥和 openssl(或任何其他库)来制作 CSR?
  • 您需要私钥来制作CSR。否则,您必须对您的公钥进行攻击以获取其私钥。

标签: php openssl pki


【解决方案1】:

X.509 证书有一个主题和一个颁发者。如果您只有主题的公钥,您仍然可以使用 CA 的私钥创建 CA 签名证书。使用phpseclib, a pure PHP X.509 implementation...

<?php
include('File/X509.php');
include('Crypt/RSA.php');

// load private key for issuer / CA
$CAPrivKey = new Crypt_RSA();
$CAPrivKey->loadKey('...');

// load public key for subject
$pubKey = new Crypt_RSA();
$pubKey->loadKey('...');
$pubKey->setPublicKey();

// create the DN for the subject
$subject = new File_X509();
$subject->setDN('...');
$subject->setPublicKey($pubKey);

// create the DN for the issuer
// (the DN can be loaded from another X.509 cert too)
$issuer = new File_X509();
$issuer->setPrivateKey($CAPrivKey);
$issuer->setDN('...');

$x509 = new File_X509();
$x509->setStartDate('-1 month');
$x509->setEndDate('+1 year');

$result = $x509->sign($issuer, $subject);
echo $x509->saveX509($result);
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2013-01-06
    • 2019-12-20
    • 2019-03-17
    • 2020-07-13
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多