Rol*_*and 15 php openssl certificate x509
我想在PHP 5.x中创建一个自签名证书.使用我自己的(替代)openssl配置,应该由我的PHP代码定义.PHP脚本将在不同的环境(共享托管Web服务器)上运行.
官方PHP手册说:
默认情况下,系统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);
Run Code Online (Sandbox Code Playgroud)
编辑:
在PHP手册的用户贡献说明中,为什么他们总是指定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,
);
Run Code Online (Sandbox Code Playgroud)
Hom*_*der 11
OpenSSL中有许多配置设置无法通过$ configargs在PHP中定义(传递给OpenSSL函数的PHP参数).
如果您没有指定替代的openssl配置文件,它将自动采用默认的openssl.cnf.
建议:由于您的脚本将在不同的服务器上运行,因此您应始终使用自己的openssl.cnf.
只需创建一个简单的文本文件,并在其中放入以下4行.然后将路径传递给您正在使用的OpenSSL函数(请查看上面的第二个示例).
distinguished_name = req_distinguished_name
[req_distinguished_name]
[v3_req]
[v3_ca]
Run Code Online (Sandbox Code Playgroud)
似乎这4行是openssl.cnf必须包含的最小行.
对此的回答与SSL的作用有关.它是围绕客户端和服务器之间的html/http对话的"shell".Apache运行它.它并非真正"在"PHP领域.当你选择重新创建密钥对时,你真正在做的就是在shins中踢Apache,迫使客户端/服务器用一对新的SSL密钥对重新启动他们的对话.
在某些意义上,这可能被视为有点像重新构建session_id
我的问题:我有必要明确指定openssl.conf的路径,因为没有它它似乎工作正常:
这里没有创建自签名证书,重新创建它.因此,当你不提供路径时,它就可以了,因为它已经有了Apache的路径.
| 归档时间: |
|
| 查看次数: |
9936 次 |
| 最近记录: |