Https证书生成步骤
2018-07-10 本文已影响111人
9dfaf364d57f
目录:
1、生成密钥
2、签发证书
3、生成安卓使用的证书集bks(cer转bks)
4、jks转bks(双向校验需要)
5、cer转jks(tls服务器需要)
1、生成密钥
生成密钥(即jks文件),此处的代码是为了生成一个“zinc_server.jks”的密钥。
keytool -genkey -alias zinc_server -keyalg RSA -keystore zinc_server.jks -validity 3600 -storepass 123456
参数说明:
- genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
在没有指定生成位置的情况下,keystore会存在用户系统默认目录,如:对于window xp系统,会生成在系统的C:/Documents and Settings/UserName/文件名为“.keystore”
- alias:产生别名
- keystore:指定密钥库的名称
- validity:指定创建的证书有效期多少天
- storepass:指定密钥库的密码(获取keystore信息所需的密码)
- keyalg:指定密钥的算法(如:RSA 、DSA;如果不指定默认采用DSA)
更多的参数:
- keysize:指定密钥长度
- keypass:指定别名条目的密码(私钥的密码)
- dname:指定证书拥有者信息
例如: "CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码"
- list :显示密钥库中的证书信息
keytool -list -keystore 指定keystore -storepass 密码
- v:显示密钥库中的证书详细信息
keytool -list -v -keystore 指定keystore -storepass 密码
- export:将别名指定的证书导出到文件
keytool -export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书位置及证书名称 -storepass 密码
- file 参数指定导出到文件的文件名
- delete 删除密钥库中某条目
keytool -delete -alias 指定需删除的别 -keystore 指定keystore -storepass 密码
- printcert 查看导出的证书信息
keytool -printcert -file zinc_server.cer(换成你的证书)
- keypasswd 修改密钥库中指定条目口令
keytool -keypasswd -alias 需修改的别名 -keypass 旧密码 -new 新密码 -storepass keystore密码 -keystore sage
- storepasswd 修改keystore口令
keytool -storepasswd -keystore 需修改口令的keystore -storepass 原始密码 -new 新密码
- import 将已签名数字证书导入密钥库
keytool -import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书
2、签发证书
这里使用了第1小节的zinc_server.jks密钥进行签发zinc_server.cer证书
keytool -export -alias zinc_server -file zinc_server.cer -keystore zinc_server.jks -storepass 123456
3、生成安卓使用的证书集bks
在安卓中需要使用bks格式的证书集,所以在安卓中使用的话还需要将第2小节生成的证书进行转换。使用的如下命令
keytool -importcert -file zinc_server.cer -keystore zinc_server.bks -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
敲黑板啦!!!使用了如上命令,有可能你会遇到找不到BouncyCastleProvider这个类的异常,这个时候你需要稍微配置下环境(不难哦,千万不要放弃!)。
进入到bouncycastle官网下载自己对应的jdk的版本。将下载好的jar包放到你的jdk安装的路径下/Contents/Home/jre/lib/ext,重新再试一次即可。
4、jks转bks
这一小节的内容,是因为有些app需要进行双向校验,需要将客户端的密钥放在app中。
需要借助一个工具进行