[英]Connecting to a web service with PHP given only username, password and certificate authority
[英]Private Certificate Authority in PHP?
我正在建立一個私有CA,我想使用PHP與它進行交互。 我已經嘗試使用PHP的內置openssl庫 。 因此,我創建了一個CSR,並使用openssl_csr_sign
進行簽名。
這確實簽署了CSR,僅此而已。 在OpenSSL的CLI中,它類似於
openssl x509 -req -days 360 -in file.csr -CA ca.crt -CAkey ca.key ...
而我想要類似的東西
openssl ca -cert ca.crt -keyfile ca.key -in file.csr -out file.crt ...
基本上,它使用x509模塊而不是ca模塊對其進行簽名。 因此,它不會將其寫入openssl.cnf
指定的數據庫中,它不會使用或更新序列號; 它比實際的CA更像是“我信任這個人,所以我將用我的私鑰對他的公鑰進行簽名”。 有沒有辦法用PHP處理OpenCA的私有CA?
是的,沒有。
盡管使用了提供的openssl.conf文件,PHP的OpenSSL擴展並不會自動管理證書數據庫和/或序列號,並且不提供任何實用程序來幫助您。
另一方面,數據庫本身具有相對簡單的格式 ,因此您可以使用原始文件系統功能自己實現它。 如果您確實選擇了這條路線,這里有一些提示:
fgets()
在解析時會派上用場。
fscanf()
看起來更好,但是它會將所有空格都一樣對待,並且制表符是格式的重要組成部分,所以... file()
甚至更容易,但僅用於讀取。 可能是您需要同時進行讀寫操作,並且需要獲得文件上的鎖,以避免出現競爭狀況。 $serial = hexdec(file_get_contents($pathToSerial))
,將該變量傳遞給openssl_csr_sign()
,然后將sprintf("%X\\n", $serial + 1)
寫入文件。 <filename>.old
,將其重命名為<filename>.old
,然后創建一個全新的<filename>
作為<filename>
。 這意味着,每當您使用CLI工具時,任何文件系統所有權,授予您PHP腳本訪問權限的權限都會丟失。
chown
, chmod
指令)以通知您。 resource
類型的(使用后應關閉)。 要拋出異常並僅在必要時關閉資源,我想預定義保存變量的變量,並在引發異常之前在處理所有有條件的無資源例程的閉包中use
它們。 如您所見,如果您知道自己在做什么,它是可管理的,但是它有很多陷阱,對於簡單的PoC而言,確實不值得。 通過exec()
(和兄弟姐妹)調用CLI工具是一個更簡單的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.