RSA私钥及公钥生成
我们建议可以使用OpenSSL工具命令,或取得信任的密钥生成工具来生成密钥。
第一步 生成RSA密钥
首先进入OpenSSL工具,输入以下命令,注意#的内容不用输入,这只是注释。
OpenSSL>genrsa -out app_private_key.pem 2048 #默认生成PKCS#1的私钥,2048表示私钥的长度,我们建议是2048位,这样安全,如果由于某些限制,可以改为1024,表示1024位长度,我们仍然支持
OpenSSL>rsa -in app_private_key.pem -pubout -out app_public_key.pem #从私钥导出对应的公钥,默认此公钥是PKCS#8的
OpenSSL>pkcs8 -topk8 -inform PEM -in app_private_key.pem -outform PEM -nocrypt -out app_private_key_pkcs8.pem #Java开发者需要将私钥转换成PKCS8格式
OpenSSL>exit #退出OpenSSL程序
经过以上步骤,开发者可以在当前文件夹中(OpenSSL运行文件夹),看到app_private_key.pem(开发者RSA私钥,非Java语言适用)、app_private_key_pkcs8.pem(pkcs8格式开发者RSA私钥,Java语言适用)和app_public_key.pem(开发者RSA公钥)3个文件。开发者将私钥保留,将公钥提交配置到商户管理平台,用于验证签名。以下为私钥文件和公钥文件示例。
TIPS:对于使用Java的开发者,需将生成的pkcs8格式的私钥去除头尾、换行和空格,作为私钥填入代码中,对于.NET和PHP的开发者来说,无需进行pkcs8命令行操作。(特殊说明:因我们C#版本demo中签名方法特殊调用,故当.NET开发者使用我们C#版本demo里的签名方法时,也需用pkcs8格式的私钥,并将生成的pkcs8格式的私钥去除头尾、换行和空格,若不用demo中的签名方法,则不是用pkcs8格式的私钥,也无需这样操作
)
标准的私钥文件示例(PHP,.NET使用)
PKCS8处理后的私钥文件示例(Java使用)
公钥文件示例
第二步 处理公钥格式
将公钥文件去除头尾、换行和空格,转成一行字符串。登录商户管理平台,选择密钥信息管理,点击上传交易公钥,将处理后的字符串粘贴进去,保存。
例如转换前的公钥格式:
转换后得到的字符串为:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArmRE09O3Fv/f/rFUN6LbLIKJY2kZaOUBKDlLJhyWYBgrNV6lUebZL8mpMdsQmaL+dhzmtjrdLQMxXk+QPH0ZmfGmgLv2ibPwSXeX2iPpkUBOquHvT8mjUGPGJpHXnMkILICIKKoEB+hEgwlOGxTf2vxluwtWh193hKE9GVjAvrjqrWiVLUs/eYY5kBlHgLhsSfLpySF4NIZRzI4RRPa8uo4khqsQqz0ntufFIUVrICyRPsvuS2UhdM8bxbNsVxDVZrFTg3xypqGaPgicbQk9ZDuF5vs/Pg96AsBETUi09cJRZgGUoBZhk8/JQqFaI9FB/mhanaZcROcFbx+FisGJiQIDAQAB
第三步 处理平台公钥格式
在商户管理平台里的密钥信息管理->查看平台公钥,可以获取到平台的公钥内容,用于对返回的报文作验证签名。
例如平台公钥原始内容为一个字符串:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1HRLAfzFD54PNqRl9c7sfdHtE+eVy/XmnqoWe7lq5CuZgnLvpdWUUal5HLUGTlb53kjtlanetLnMW22Y5wojZrQCT1hXIzBlxD69vSLTHQOdQPBTcMuL7aWWXiuyxgNB84AdjiTbQFm4gituyGECl8IFsWUgSL++dfOXSS/2IO1Irj3rPResjfqidsbL0oYVU5W7/H3TqM9bhdhNJGj/j2DnF7rSK/w4b5+PFrd7OOktp2Yd/Hr+7RWMOimf7h7o8ZNGZIAZlQKWlz/U0Lgf4V90x1vlz5SRR0J2EJU6n8R7pBlVe43m3iycvdfUElI9gc4ykaWWWM4oe/4mF/tLwIDAQAB
如果使用非Java语言(如PHP/.NET)开发,需要给上面的字符串加上头尾,并且字符串内容里每隔64位加换行符。变换后的公钥格式如下:
如果是Java语言开发,就不需要做变换了。