大多数情况下在微信支付的时候使用的都是apiclient_cert.p12这个证书,很少用到后面两个。微信的APIv3接口发布后改变了签名规则,要用到私钥证书apiclient_key.pem。由于平时基本未使用过私钥证书可能会丢失,证书又不能重新下载只能更换,是件很头疼的事情。其实有 apiclient_cert.p12就可以生成另外两个证书。
使用命令:openssl pkcs12 -nodes -clcerts -in apiclient_cert.p12 -out apiclient_key.pem
过程中会让输入密码,默认就是证书对应的 商户号 。
输入正确的密码后,得到输出的密钥证书文件。
文件打开后有两部分-----BEGIN CERTIFICATE-----是公钥证书部分apiclient_cert.pem,-----BEGIN PRIVATE KEY-----是私钥证书部分apiclient_key.pem
至此证书转换完成,经测试是可以使用的。
另外多说一下:官方给的openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem导出的私钥证书是不能用的,会报无效的密钥错误。这个命令使用过程中会输入两次密码,第一次是证书的密码也就是商户号,第二个是自己设置的私钥证书密码。导出后还要用openssl rsa -in apiclient_key.pem - apiclient_key.pem这个命令转换一下格式,这个命令执行的时候会让输入自己设置的私钥证书密码。第二个命令的目的应该是去除密码,因为证书一般都是在服务器使用,不需要密码。 然而不知道是我使用的方式问题,还是本身就是错误,这种方式导出的证书并不能用。