SUN公司提供了创建和管理证书的工具keytool,一般放在jdk下<JAVA_HOME>\bin\keytool.exe。
先来说一下加解密算法的分类。基本上可以分为三类,它们分别是对称性解密算法、非对称性加密算法和消息摘要算法。
对称性加密算法使用同一个密钥对信息进行加密和解密,其信息的安全性一部分取决于加密算法和密钥的长度,另一部分取决于密钥在传递过程中是否会被截获或盗取。
非对称性加密算法使用两个密钥分别对信息进行加密和解密,这两个密钥称为私钥/公钥对。使用私钥加密的信息必须使用公钥解密,反之亦然。公钥可以公开发布,私钥由加密方保存,绝对不公开,将私钥被截获或窃取的可能性降到最低,因此非对称性加密算法的安全性比对称性加密算法的安全性更高。
Keytool将密钥(key)和证书(certificates)存在一个称为keystore的密钥库中。在keystore里,包含两种数据:密钥实体(Key entity)-密钥(secret key)或者是私钥和配对公钥(采用非对称加密)可信任的证书实体(trusted certificate entries)-只包含公钥。
要进行非对称性加密,我们首先要有属于自己的私钥/公钥对,创建密钥对的时候, keytool
会在 keystore 中生成一个新的条目,-alias xxx
选项就是对该条目进行命名。生成密钥对之后,私钥是以原始数据直接储存在 keystore 中的,而公钥是要发布出去的,所以它被封装在一个 X.509 格式的自签名证书中。换句话说,创建密钥对的时候,同时就创建了一个自签名的证书。
1 在密钥库中创建证书条目
keytool -genkey -keyalg RSA -alias aliceCA -dname "cn=localhost"-keystoreserver.keystore -storepass changeit -validity 3650
功能:
创建一个别名为aliceCA的证书条目,该条目存放在名为server.keystore的密钥库中,若server.keystore密钥库不存在则创建。
参数说明:
-genkeypair:生成一对非对称密钥;
-alias:指定密钥对的别名,该别名是公开的;
-keyalg:指定加密算法,本例中的采用通用的RAS加密算法;
-keystore:密钥库的路径及名称,不指定的话,默认在操作系统的用户目录下生成一个".keystore"的文件
-storepass:密钥库密码为changeit
aliceCA的证书条目也有一个密码,可以与密钥库密码相同,也可以在命令行交互式指定。
2 查看证书库中的证书条目
keytool -list -keystore server.keystore
keytool –list -v -keystore server.keystore
3 把证书条目导出到证书文件中
keytool -export -alias aliceCA -file server.cer -keystore server.keystore -storepass changeit
4 把证书导入到证书库(客户端)中(将证书文件server.cer导入到证书库CAcerts中)
keytool -import -alias aliceCA -fileserver.cer -keystore CAcerts-storepass changeit
keytool -import -trustcacerts -alias cntvCA-file F:/projects/cntv.neulion.com.cn.crt -keystore "C:/ProgramFiles/Java/jdk1.8.0_71/jre/lib/security/cacerts" -storepass changeit
CAcerts位于jdk下jre/lib/security下面
-trustcacerts(官方文档:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/keytool.html)
Before adding the certificate to the keystore, keytooltries to verify it by attempting to construct a chain of trust fromthat certificate to a self-signed certificate (belonging to a rootCA), using trusted certificates that are already available in thekeystore.
If the -trustcacerts
option has been specified,additional certificates are considered for the chain of trust,namely the certificates in afile named"cacerts".
5 查看证书文件的信息
keytool -printcert -file server.cer
6 删除密钥库中的条目
keytool -delete -keystore server.keystore -alias aliceCA
7 修改证书条目的密码
keytool -keypasswd -alias aliceCA -keystore server.keystore
这里需要输入密钥库密码,输入旧的证书条目密码,然后输入新的证书条目密码。
keytool -keypasswd -alias aliceCA -keypass 旧密码 -new 新秘密 -storepass 密钥库密码 -keystore server.keystore