java和nodejs中加密算法的名称,公钥私钥的存储形式等方法均不同,导致之间进行加密通信并不如想象方便。
1. 架设nodejs https服务器
生成私钥
openssl genrsa 2048 > key.pem
私钥的内容是-----BEGIN RSA PRIVATE KEY-----开头的一长串字符串
生成证书
openssl req -x509 -new -key key.pem > key-cert.pem
证书的内容是-----BEGIN CERTIFICATE-----开头的一长串字符串
在nodejs中使用
https.createServer(
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>key:fs.readFileSync('./key.pem'),
<span style="white-space:pre"> </span>cert:fs.readFileSync('./key-cert.pem')
<span style="white-space:pre"> </span>},
<span style="white-space:pre"> </span>function(req,res){
<span style="white-space:pre"> </span>//doing sth
<span style="white-space:pre"> </span>}
).listen(3000);
2.生成服务器和客户端公钥私钥
由于Java只能读取某些格式的秘钥,所以需要生成并转换相应格式的秘钥。
服务器端生成公钥
openssl rsa -in key.pem -pubout > public.pem
客户端生成私钥
openssl genrsa 2048 > client_key.pem
客户端生成公钥
openssl rsa -in client_key.pem -pubout > client_public.pem
openssl rsa -in key.pem -pubout > public.pem
生成Der格式的客户端公钥
openssl rsa -in client_key.pem -pubout -outform DER -out client_key.der
生成Der格式的服务器公钥
openssl rsa -in key.pem -pubout -outform DER -out public.der
生成PKCS#8格式的客户端私钥
openssl pkcs8 -topk8 -inform PEM -outform DER -in client_key.pem -nocrypt > client_key.der
3. 客户端载入秘钥
客户端想要和服务器通信,需要自己的私钥用来生成签名,对方的公钥用来加密解密,文件为.der格式以供java读入,如client_key.der, public.der