簡體   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