【发布时间】:2012-03-23 03:25:52
【问题描述】:
我想在 PHP 5.x 中创建一个自签名证书。使用我自己的(替代)openssl 配置,该配置应该由我的 PHP 代码定义。 PHP 脚本将在不同的环境(共享主机网络服务器)上运行。
官方PHP Manual说:
默认情况下,你的系统openssl.conf中的信息用于初始化请求;您可以通过设置 configargs 的 config_section_section 键来指定配置文件部分。您还可以通过将 config 键的值设置为您要使用的文件的路径来指定 替代 openssl 配置文件。 以下键(如果存在于 configargs 中)的行为与它们在 openssl 中的等效项相同.conf,如下表所列.....
我的问题:我是否有理由明确指定 openssl.conf 的路径,因为没有它似乎可以正常工作:
$Configs = array(
'digest_alg' => 'sha1',
'x509_extensions' => 'v3_ca',
'req_extensions' => 'v3_req',
'private_key_bits' => 1024,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
'encrypt_key' => true,
'encrypt_key_cipher' => OPENSSL_CIPHER_3DES
);
$privkey = openssl_pkey_new();
$csr = openssl_csr_new($dn, $privkey, $Configs);
$sscert = openssl_csr_sign($csr, null, $privkey, 365, $Configs);
编辑:
在PHP Manual的用户投稿笔记中,为什么总是指定openssl.cnf的路径?例如:
$configargs = array(
'config' => '/etc/ssl/openssl.cnf',
'digest_alg' => 'md5',
'x509_extensions' => 'v3_ca',
'req_extensions' => 'v3_req',
'private_key_bits' => 666,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
'encrypt_key' => false,
);
【问题讨论】:
-
.conf 文件用于指定默认值,因此您不必为您创建的每个证书一遍又一遍地输入相同的内容。不使用默认值很好,只是更乏味。
-
我不是 PHP/OpenSSL 专家,但似乎某些配置设置无法通过 PHP 脚本定义/更改。有人可以确认/驳回这一点吗?
标签: php openssl certificate x509