![](/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.