java jks 证书
阅读数:154 评论数:0
跳转到新版页面分类
python/Java
正文
一、什么是证书、为什么要引用证书
1、签名
对数据进行签名有双重作用,作用一就是保证数据的完整性,证明数据并非伪造的,而且在传输的过程中没有被篡改。作用二就是防止数据的发布者否认其发布了该数据。
签名同时使用了非对称性加密算法和消息接要算法,对一块数据签名时,会先对这块数据进行消息摘要运算生一个摘要,然后对该摘要使用发布者的私钥进行加密。接收者接收到数据后,先使用发布者的公钥进行解密得到原数据的摘要,再对接收到的数据计算摘要,如果两个摘要相同,则说明数据没有篡改。
2、证书
那么怎么确定某公钥一定属于某发布者的呢?这就需要证书了,证书由权威机构颁发,其内容包含证书所有者的标识和它的公钥,并由权威机构使用它的私钥进行签名。
信息发布者通过在网络上发布证书来公开它的公钥,该证书由权威机构进行签名。
认证机构的证书由更权威的认证机构进行签名,这样就形成了证书链。证书链最顶端的证书称为根证书,根证书就只有自签名。
关于证书遵循的标准,最流行的是X.509。
二、基于keytool的证书生成与管理
1、keytool
keytool是一个Java数据证书的管理工具,它将密钥和证书存在一个称为keystore的文件中。
2、常用参数
-genkey 在用户主目录
-genkey 在用户主目录中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书(在没有指定生成位置的情况下,keystore会存在用户系统默认目录)
-alias 产生别名 每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中)
-keyalg 指定密钥的算法 (如 RSA DSA,默认值为:DSA)
-validity 指定创建的证书有效期多少天(默认 90)
-keysize 指定密钥长度 (默认 1024)
-storepass 指定密钥库的密码(获取keystore信息所需的密码)
-keypass 指定别名条目的密码(私钥的密码)
-dname 指定证书发行者信息 其中: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名 称,ST=州或省份名称,C=单位的两字母国家代码”
-list 显示密钥库中的证书信息 keytool -list -v -keystore 指定keystore -storepass 密码
-v 显示密钥库中的证书详细信息
-export 将别名指定的证书导出到文件 keytool -export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书位置及证书名称 -storepass 密码
-file 参数指定导出到文件的文件名
-delete 删除密钥库中某条目 keytool -delete -alias 指定需删除的别 -keystore 指定keystore – storepass 密码
-printcert 查看导出的证书信息 keytool -printcert -file g:\sso\michael.crt
-keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias 需修改的别名 -keypass 旧密码 -new 新密码 -storepass keystore密码 -keystore sage
-storepasswd 修改keystore口令 keytool -storepasswd -keystore g:\sso\michael.keystore(需修改口令的keystore) -storepass pwdold(原始密码) -new pwdnew(新密码)
-import 将已签名数字证书导入密钥库 keytool -import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书
中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书(在没有指定生成位置的情况下,keystore会存在用户系统默认目录)
-alias 产生别名 每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中)
-keyalg 指定密钥的算法 (如 RSA DSA,默认值为:DSA)
-validity 指定创建的证书有效期多少天(默认 90)
-keysize 指定密钥长度 (默认 1024)
-storepass 指定密钥库的密码(获取keystore信息所需的密码)
-keypass 指定别名条目的密码(私钥的密码)
-dname 指定证书发行者信息 其中: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名 称,ST=州或省份名称,C=单位的两字母国家代码”
-list 显示密钥库中的证书信息 keytool -list -v -keystore 指定keystore -storepass 密码
-v 显示密钥库中的证书详细信息
-export 将别名指定的证书导出到文件 keytool -export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书位置及证书名称 -storepass 密码
-file 参数指定导出到文件的文件名
-delete 删除密钥库中某条目 keytool -delete -alias 指定需删除的别 -keystore 指定keystore – storepass 密码
-printcert 查看导出的证书信息 keytool -printcert -file g:\sso\michael.crt
-keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias 需修改的别名 -keypass 旧密码 -new 新密码 -storepass keystore密码 -keystore sage
-storepasswd 修改keystore口令 keytool -storepasswd -keystore g:\sso\michael.keystore(需修改口令的keystore) -storepass pwdold(原始密码) -new pwdnew(新密码)
-import 将已签名数字证书导入密钥库 keytool -import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书
3、使用keytool工具创建证书
keytool -genkey -alias "yunBo" -keyalg "RSA" -keystore "d:\jkstest\yunbo.keystore" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass "123456" -storepass "changeit" -validity 180
上面创建了一个yunbo.keystore文件。
(1)-genkey表示要创建一个新的密钥。
(2)-dname 表示密钥的Distinguished Names,即密钥的发行者身份。
CN=CommonName,生成证书时,CN要和服务器的域名相同,如果在本地测试,则使用localhost
OU=organizationUnit
O=organizationName
L=localityName
S=stateName
C=country
(3)-keyalg,使用加密算法
(4)-alias,和keystore关联的别名,这个alias通常不区分大小写
(5)-keypass,私有密钥的密码
(6)-keystore,密钥所保存的目标文件
(7)-storepass,存取密码,这个密码提供从keystore文件中将信息取出
(8)-validity,该密钥的有效值,默认为90天
4、默认缺省值
-alias "mykey"
-keyalg "DSA"
-keysize 1024
-validity 90
-keystore 用户宿主目录中名为 .keystore 的文件
-file 读时为标准输入,写时为标准输出
5、导出证书给客户端安装
keytool -export -alias yunBo -keystore d:\jkstest\yunbo.keystore -file d:\jkstest\yunbo.cer -storepass "changeit"
6、keytool常用命名
(1)删除证书库里的某个证书
keytool -delete -alias tomcat -keystore cacerts -storepass 666666
三、主流的数字证书有哪些格式
一般主流的Web服务软件,通常都基于OpenSSH和Java两种基础密码库。
1、Tomcat、Weblog等web服务软件,一般使用Java提供的密码库,通过keytool工具,生成Java keystore(jks)格式的证书文件。
2、nginx等web软件,一般使用OpenSSH工具提供的密码库,生成pem、key、crt等格式的证书文件。
3、websphere等一般使用ibm自家的kdb格式的证书文件
4、iis服务,使用windows自家的pfx格式的证书文件