最简单快捷的方法,打开Terminal,使用openssl生成私钥和自签名的x509证书。
1 |
openssl req -x509 -out public_key.der -outform der -new -newkey rsa:1024 -keyout private_key.pem -days 3650 |
按照命令行的提示输入内容就行了。
几个说明:
public_key.der是输出的自签名的x509证书,即我们要用的。
private_key.pem是输出的私钥,用来解密的,请妥善保管。
rsa:1024这里的1024是密钥长度,1024是比较安全的,如果需要更安全的话,可以用2048,但是加解密代价也会增加。
-days:证书过期时间,一定要加上这个参数,默认的证书过期时间是30天,一般我们不希望证书这么短就过期,所以写上比较合适的天数,例如这里的3650(10年)。
事实上,这一行命令包含了好几个步骤(我研究下面这些步骤的原因是我手头已经由一个private_key.pem私钥了,想直接用这个来生成x509证书,也就是用到了下面的2-3)
1)创建私钥
1 |
openssl genrsa -out private_key.pem 1024 |
2)创建证书请求(按照提示输入信息)
1 |
openssl req -new -out cert.csr -key private_key.pem |
3)自签署根证书
1 |
openssl x509 -req -in cert.csr -out public_key.der -outform der -signkey private_key.pem -days 3650 |
摘自: http://blog.iamzsx.me/show.html?id=155002
参考资料:
http://blog.csdn.net/jinglijun/article/details/7770301
http://blog.csdn.net/jinglijun/article/details/7770411
PHP 使用证书加密、私钥解密:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php echo "Source: $source"; $fp=fopen("/path/to/certificate.crt","r"); $pub_key=fread($fp,8192); fclose($fp); openssl_get_publickey($pub_key); /* * NOTE: Here you use the $pub_key value (converted, I guess) */ openssl_public_encrypt($source,$crypttext,$pub_key); echo "String crypted: $crypttext"; $fp=fopen("/path/to/private.key","r"); $priv_key=fread($fp,8192); fclose($fp); // $passphrase is required if your key is encoded (suggested) $res = openssl_get_privatekey($priv_key,$passphrase); /* * NOTE: Here you use the returned resource value */ openssl_private_decrypt($crypttext,$newsource,$res); echo "String decrypt : $newsource"; |