![](/img/trans.png)
[英]Why is the file path for stream_context_set_option screwy?
[英]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.