带有 x509 属性的 PHP openssl_sign_csr

问题描述 投票:0回答:1

我有一个生成 CSR 的脚本,可以与 Windows CA 集成进行签名,但我希望可以选择使用本地 CA 进行签名,因此我使用了 openssl_sign_csr 函数。它正在签署证书,但是,它不保留 x509 属性(即扩展密钥用法和主题备用名称)。

我将配置文件传递给它,并且尝试了在互联网上找到的一些示例,我包含的关键内容是

copy_extensions = copy
x509_extensions = usr_cert
以及 usr_cert 块具有:

basicConstraints=CA:FALSE
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

但是,任何不会导致错误的配置组合都不会携带任何扩展。

我知道 CSR 包含它们,因为当由 certsrv 签名时它就带有它们。

希望能够从过去已经实现此功能的任何人那里获得一些见解。 (此外,密钥用途将用于服务器识别,很少用于客户端识别,如果这对其有任何影响的话)

php openssl cryptography
1个回答
0
投票

看看这是否对您有帮助:

<?php


$csr = file_get_contents('<your csr path and file>.csr');


$config = array(
    'config' => '<openssl path configuration file>.cnf', // openssl config path
    'digest_alg' => 'sha256', // hash algo
    'x509_extensions' => 'usr_cert', // X.509 extension
    'req_extensions' => 'req_ext', //  CSR extension
    'private_key_bits' => 2048, // Key size
);


$privateKey = openssl_pkey_new($config);


$signedCert = openssl_csr_sign($csr, null, $privateKey, 365, $config, time());


openssl_x509_export($signedCert, $certOut);


echo $certOut;

?>
© www.soinside.com 2019 - 2024. All rights reserved.