[英]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.