使用 PHP 对文档进行数字签名
Digitally Sign Document with PHP
我已经为此苦苦挣扎了两天。
我已经使用客户端证书构建了身份验证,现在我想使用相同的证书来签署文档。
到目前为止我尝试过的:
- 使用
openssl_pkey_get_public($_SERVER["SSL_CLIENT_CERT"])
获取 public 密钥,它工作正常。
- 使用
openssl_pkey_get_private($_SERVER["SSL_CLIENT_CERT"], "mypwd")
获取私钥但它不起作用,我不知道为什么。
之后,我计划使用 openssl_sign()
使用该私钥签署 pdf。
我是第一次尝试创建这样的东西,有人知道我做错了什么吗?
我的会议:[=14=]
Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8
您不能使用客户端证书的私钥,因为私钥存储在客户端机器上,不会传输到服务器。客户从不给你他的钥匙。通过网络传输任何客户端私钥 = 失败。服务器上只有 public 部分证书可用。
唯一的选择是在客户端进行签名操作(通过 ActiveX 或类似的可以与客户端证书存储交互的东西)。比如说,让客户下载文档,在那里(在浏览器中)签名,然后上传回去或其他方式。
我已经为此苦苦挣扎了两天。
我已经使用客户端证书构建了身份验证,现在我想使用相同的证书来签署文档。
到目前为止我尝试过的:
- 使用
openssl_pkey_get_public($_SERVER["SSL_CLIENT_CERT"])
获取 public 密钥,它工作正常。 - 使用
openssl_pkey_get_private($_SERVER["SSL_CLIENT_CERT"], "mypwd")
获取私钥但它不起作用,我不知道为什么。
之后,我计划使用 openssl_sign()
使用该私钥签署 pdf。
我是第一次尝试创建这样的东西,有人知道我做错了什么吗?
我的会议:[=14=]
Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8
您不能使用客户端证书的私钥,因为私钥存储在客户端机器上,不会传输到服务器。客户从不给你他的钥匙。通过网络传输任何客户端私钥 = 失败。服务器上只有 public 部分证书可用。
唯一的选择是在客户端进行签名操作(通过 ActiveX 或类似的可以与客户端证书存储交互的东西)。比如说,让客户下载文档,在那里(在浏览器中)签名,然后上传回去或其他方式。