https加密解密过程二、名词解析及文件生成
密钥仓库keystore文件
Keytool是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中
keystore文件的内容其实就是把私钥、公钥以及公钥对应的地址等信息输出为json格式的数据
在keystore里,包含两种数据:
密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
可信任的证书实体(trusted certificate entries)——只包含公钥
Keystore可以简单理解为一个存放应用签名的文件。我们可以称它为秘钥库,是为了保护我们自己开发的应用的。
通过秘钥,可以证明这个APP是由某个个人或者企业开发的。在生成KeyStore的时候,开发者会录入自己姓名、单位、组织、所在城市、省份、国家代码等信息。
keytool -genkeypair -alias MetersPhereTestPCK -keypass 123456 -keyalg RSA -keysize 2048 -validity 36500 -storetype PKCS12 -keystore D:/p12/MetersPhereTestPCK.keystore
这个命令是jdk自带的,在cmd窗口执行即可
如果报错
keytool 错误: java.security.KeyStoreException: Unrecognized keystore format. Please load it with a specified type
我也不知道为什么,我的方式是删除文件再重建,且换个名字,同时把指令里的额名字也换了,然后打开新的cmd窗口,多试几次,就成功了
命令解释:
• -genkey 表示要创建一个新的密钥。
• -alias 表示 keystore 的别名。
• -keyalg 表示使用的加密算法是 RSA。
• -keysize 表示密钥的长度.。
• -keystore 表示生成的密钥存放位直。
• -validity 表示密钥的有效时间,单位为天。
•-storepass 指定访问密钥库的密码。
•-storetype :密钥库类型,这里设置为 PKCS12
•-sigalg:签名算法,当密钥算法设为RSA时,可以设置的签名算法有:MD5withRSA、SHA1withRSA、SHA256withRSA、SHA384withRSA、SHA512withRSA,这里咱们没有用到
再次返回文件目录检查文件,文件内已经有内容了
经过上述操作,秘钥库中已经创建了数字证书(没有经过CA认证),但不影响我们使用。我们可以将数字证书导出,发送给合作伙伴进行加密交互
.p12(PKCS #12)
我的理解就是和keystore是一个东西,只是不同的格式
我们的每一个keystore都可以生成一个.p12文件,这个文件是一个加密的文件,只要知道其密码,就可以供给所有的系统设备使用,使设备不需要在重新申请开发和发布证书,就能使用。
二进制格式,同时包含证书和私钥,一般有密码保护。
注意:一般.p12文件是给与别人使用的,本机必须已经有一个带秘钥的证书才可以生成.p12文件
.keyStore一般存放的是(服务器端或客户端)证书与密钥,或直接存放 .p12 文件包。
.p12一般存放的是生成的(服务器端或客户端)证书与密钥,类似打包存放。
有加密解密,肯定伴随而来的会有一套标准存在,就像我们的社会一样,法律,规定都是必不可少的;由RSA实验室和其他安全系统开发商为促进公钥密码的发展而制定的一些列标准–PKCS(公钥加密标准)。它至今共发不过15个标准,常用标准有:
PKCS#7:密码消息语法标准;
PKCS#10:证书请求语法标准;文件用于证书签发申请;
PKCS#12:个人信息交换语法标准;文件可作为Java中的秘钥库或信任度直接使用。
.p12则是PKCS#12文件名后缀的一种,所以常用来被传送私钥,用来解密使用。
其实说来说去,他们同属于“数字证书”;什么是数字证书呢?数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(CertificateAuthority)中心发行的,人们可以在网上用它来识别对方的身份。在当今这个互联网时代,已经成为了必不可少,不可或缺的一个过程。
然后根据生成的srore文件导出p12文件
keytool -importkeystore -srckeystore D:/p12/MetersPhereTestPCK.keystore -destkeystore D:/p12/MetersPhereTestPCK.p12 -srcalias MetersPhereTestPCK -destalias MetersPhereTestPCK -srcstoretype JKS -deststoretype PKCS12 -noprompt
查看生成了对应的文件
指令对应的含义
-importkeystore 从其他秘钥库导入一个或所有条目
-srckeystore 原来keystore文件所在位置
-destkeystore 生成的p12文件的位置
-deststoretype 目标密钥库类型
-srcstorepass :源密钥库密码,这里的设置值与步骤3中的storepass对应;
-noprompt 无提示
-srcalias 当指定了srcalias选项时,该命令将别名对应的条目导入至目标密钥库中。若未指定destalias选项,则会使用srcalias选项作为目标别名。若源条目受密码保护,需要通过srckeypass选项指定,用于恢复条目。当未指定srckeypass选项时,会尝试使用srcstorepass选项恢复条目。当未指定srcstorepass选项或不正确时,会提示用户输入密码。目标条目将会使用destkeypass作为密码进行保护。若未指定destkeypass选项,则会使用源条目密码进行保护。
当未指定srcalias选项时,源密钥库中的全部条目都会会导入目标密钥库中。每个目标密钥库中的条目都会使用源密钥库对应的别名存储。若源条目受密码保护,srcstorepass选项为源密钥库密码用于恢复条目。若srcstorepass选项未指定或不正确,会提示用户输入密码。当源密钥库中某个条目的类型不受目标密钥库支持时,或将条目存储至目标密钥库时出现错误时,将会提示用户跳过当前条目并继续,还是退出。目标条目会使用源条目的密码进行保护。
当目标别名已在目标密钥库中存在时,会提示用户覆盖对应的条目还是创建新的别名。
这一段我没看懂,只知道destalias和srcalias跟上我们在生成store文件时候的alias 参数就可以
声明:为什么-srcstoretype JKS,JKS和store明明是两种格式,为什么这里是JKS我也不清楚,以后明白了再来填坑
.key私钥文件
命令如下
openssl pkcs12 -in D:/p12/MetersPhereTestPCK.p12 -nocerts -nodes -out D:/p12/MetersPhereTestPCK.key
我们需要安装一下openssl
下载连接
全功能的是不带light的,我们下载带light基本功能的就行
下载下来傻瓜式安装即可,然后配置环境变量
.cer公钥文件
可以是二进制格式(der),可以是文本格式(pem)。只包含证书,不保存私钥。一般Linux使用.crt后缀,.cer是windows后缀。
keytool -export -alias MetersPhereTestPCK -keystore D:/p12/MetersPhereTestPCK.keystore -rfc -file D:/p12/MetersPhereTestPCK.cer