繁体   English   中英

PHP stream_context_set_option SSL 证书作为字符串

[英]PHP stream_context_set_option SSL certificate as string

我有一个奇怪的问题。 基本上,我需要这样做:

 $handle = stream_context_create();
 stream_context_set_option($handle , 'ssl', 'local_cert', '/tmp/cert');

然而。 证书不作为服务器中的文件保存。 相反,它是一个保存在集群数据库环境中的加密字符串。 因此,证书不是文件名指针,而是证书的物理内容。 因此,我不需要使用文件名,而是需要指定证书的内容。

例如:

 $cert = '-----BEGIN CERTIFICATE-----....
 upWbwmdMd61SjNCdtOpZcNW3YmzuT96Fr7GUPiDQ
 -----END CERTIFICATE-----';

有谁知道我到底如何做到这一点? 我正在为这个问题挠头,但我的直觉告诉我这是可行的。

提前谢谢大家!

正如 Maerlyn 所说,似乎唯一的方法是将证书从内存写入临时文件,调用该函数,发出请求,然后删除临时文件。

我查看了 PHP 源代码(此处为相关代码),当您发出将使用 SSL 的请求时,它会检查是否设置了local_cert上下文选项,如果是,则最终调用 OpenSSL 函数SSL_CTX_use_PrivateKey_file ,该函数从磁盘文件。

请注意,在执行请求之前不会读取该文件,因此您在请求之后才能删除临时文件,而不是在调用stream_context_set_option

我尝试使用 stream_wrapper (php://memory & custom stream wrapper) 没有成功:-(。至少,你可以创建一个随机临时文件,注册它在关机时删除,然后运行你的代码

$tmp_file = tempnam(sys_get_temp_dir(), "key");
register_shutdown_function("unlink",  $tmp_file);

//rest of your code go there

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM