什么是Keytool?

keytool用来管理私钥仓库(keystore)和与之相关的X.509证书链(用以验证与私钥对应的公钥),也可以用来管理其他信任实体。
什么是keystore?
是java的密钥库、用来进行通信加密用的、比如数字签名。keystore就是用来保存密钥对的,比如公钥和私钥。
什么是cer?
用于存储公钥证书的文件格式。公钥,就是给大家用的,你可以通过电子邮件发布,可以通过网站让别人下载,公钥其实是用来加密/验章用的。私钥,就是自己的,必须非常小心保存,最好加上密码,私钥是用来解密/签章,首先就Key的所有权来说,私钥只有个人拥有。公钥与私钥的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密。
keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,
包含两种数据:
密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
可信任的证书实体(trusted certificate entries)——只包含公钥
ailas(别名)每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写
下面给出一个java 调用 keytool 生成keystore 和 cer 证书的例子测试:
[java]view plaincopy
- publicclassExportCertFormKeystore{
- publicvoidexecCommand(String[]arstringCommand){
- for(inti=0;i<arstringCommand.length;i++){
- out.print(arstringCommand[i]+”“);
- }
- try{
- getRuntime().exec(arstringCommand);
- }catch(Exceptione){
- out.println(e.getMessage());
- }
- }
- publicvoidexecCommand(StringarstringCommand){
- try{
- getRuntime().exec(arstringCommand);
- }catch(Exceptione){
- out.println(e.getMessage());
- }
- }
- /**
- *生成密钥
- */
- publicvoidgenkey(){
- String[]arstringCommand=newString[]{
- “cmd“,“/k”,
- “start”,//cmdShell命令
- “keytool”,
- “-genkey”,//-genkey表示生成密钥
- “-validity”,//-validity指定证书有效期(单位:天),这里是36000天
- “36500”,
- “-keysize”,//指定密钥长度
- “1024”,
- “-alias”,//-alias指定别名,这里是ss
- “ss”,
- “-keyalg”,//-keyalg指定密钥的算法(如RSADSA(如果不指定默认采用DSA))
- “RSA”,
- “-keystore”,//-keystore指定存储位置,这里是d:/demo.keystore
- “d:/demo.keystore”,
- “-dname”,//CN=(名字与姓氏),OU=(组织单位名称),O=(组织名称),L=(城市或区域名称),
- //ST=(州或省份名称),C=(单位的两字母国家代码)”
- “CN=(SS),OU=(SS),O=(SS),L=(BJ),ST=(BJ),C=(CN)”,
- “-storepass”,//指定密钥库的密码(获取keystore信息所需的密码)
- “123456”,
- “-keypass”,//指定别名条目的密码(私钥的密码)
- “123456”,
- “-v”//-v显示密钥库中的证书详细信息
- };
- execCommand(arstringCommand);
- }
- /**
- *导出证书文件
- */
- publicvoidexport(){
- String[]arstringCommand=newString[]{
- “cmd“,“/k”,
- “start”,//cmdShell命令
- “keytool”,
- “-export”,//–export指定为导出操作
- “-keystore”,//-keystore指定keystore文件,这里是d:/demo.keystore
- “d:/demo.keystore”,
- “-alias”,//-alias指定别名,这里是ss
- “ss”,
- “-file”,//-file指向导出路径
- “d:/demo.cer”,
- “-storepass”,//指定密钥库的密码
- “123456”
- };
- execCommand(arstringCommand);
- }
- }
JUnit测试用例:
[java]view plaincopy
- importjunit.Test;
- publicclassExportCertFormKeystoreTest{
- @Test
- publicvoidgenkeyTest(){
- //生成密钥测试
- newExportCertFormKeystore().genkey();
- }
- @Test
- publicvoidexportTest(){
- //导出证书文件测试
- newExportCertFormKeystore().export();
- }
- }
运行测试用例之后,在D盘的根目录下面会生成两个文件:
Demo.keystore
Demo.cer
其中SSL证书采取公钥和私钥的经典案例。SSL证书采用了技术含量比较高的加密技术。日后GDCA()将会持续为大家推荐更多关于SSL证书的技术知识。让大家正确认识SSL证书,快速无误部署HTTPS安全协议。更多资讯,请关注GDCA。
相关搜索
- keystore 导出公钥cer
- keystore cer
- cer文件生成keystore
- keystore生成cer
- cer转keystore
- cer导入keystore
- java keystore cer
- keystore导出私钥
- keystore 导出证书