龙空技术网

Java,安全,密钥库和证书格式、Keytool生成数字证书

古怪今人 177

前言:

目前我们对“java证书”大约比较关怀,咱们都想要分析一些“java证书”的相关知识。那么小编也在网上收集了一些有关“java证书””的相关文章,希望各位老铁们能喜欢,同学们快快来学习一下吧!

数字证书(Digital Certificate)

数字证书是指在互联网通讯中标志通讯各方身份信息的一个数字认证,可以在网上用它来识别对方的身份。

数字证书从本质上来说是一种电子文档,是由电子商务认证中心(CA中心)所颁发的一种较为权威与公正的证书。

数字证书的基本架构是公开密钥PKI,即利用一对密钥实施加密和解密。其中密钥包括私钥和公钥,私钥主要用于签名和解密,由用户自定义,只有用户自己知道;公钥用于签名验证和加密,可被多个用户共享。

PKCS(The Public-Key Cryptography Standards),公钥密码学标准

公钥密码学标准(PKCS)是由RSA实验室与一个非正式联盟合作共同开发的一套公钥密码学的标准,这个非正式联盟最初包括Apple, Microsoft, DEC, Lotus, Sun 和 MIT。

PKCS已经被OIW(OSI 标准实现研讨会)作为一个OSI标准实现。

PKCS是基于二进制和ASCII编码来设计的,也兼容ITU-T X.509标准。

PKCS(The Public-Key Cryptography Standards):

由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。

PKCS已经公布了以下标准(到1999年底):

PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封。

PKCS#3:定义Diffie-Hellman密钥交换协议。

PKCS#5:描述一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD2或MD5 从口令中派生密钥,并采用DES-CBC模式加密。主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息。

PKCS#6:描述了公钥证书的标准语法,主要描述X.509证书的扩展格式。

PKCS#7:定义一种通用的消息语法,包括数字签名和加密等用于增强的加密机制,PKCS#7与PEM兼容,所以不需其他密码操作,就可以将加密的消息转换成PEM消息。

PKCS#8:描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等。

PKCS#9:定义一些用于PKCS#6证书扩展、PKCS#7数字签名和PKCS#8私钥加密信息的属性类型。

PKCS#10:描述证书请求语法。

PKCS#11:称为Cyptoki,定义了一套独立于技术的程序设计接口,用于智能卡和PCMCIA卡之类的加密设备。

PKCS#12:描述个人信息交换语法标准。描述了将用户公钥、私钥、证书和其他相关信息打包的语法。

PKCS#13:椭圆曲线密码体制标准。

PKCS#14:伪随机数生成标准。

PKCS#15:密码令牌信息格式标准。

常见的密钥库文件格式(Keystore)和证书文件格式(Certificate)JDK命令keytool,创建数字证书到密钥库

JDK命令keytool,创建证书:

keytool -genkey -dname "CN=XFDServer,OU=XFDUnit,O=XFD,L=TaiYuan, ST=ShanXi, C=CN" -keysize 2048 -alias server -keyalg RSA -keystore c:/server.jks -keypass 123456 -storepass 123456 -validity 36500

keytool -genkey -dname "CN=XFDClient,OU=XFDUnit,O=XFD,L=TaiYuan, ST=ShanXi, C=CN" -keysize 2048 -alias client -keyalg RSA -keystore c:/server.jks -keypass 123456 -storepass 123456 -validity 36500

参数说明:

-genkey,生成秘钥,默认会在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书;

-dname,拥有者信息,CN:姓名;OU:组织单位名称;O:组织名称;L:省/市/自治区名称;C:国家/地区代码;

-keysize,秘钥长度,512、1024、2048、4096等;

-alias,产生别名;

-keyalg,指定密钥的算法,如:RSA DSA等,如果不指定默认采用DSA;

-keystore,指定密钥库的名称,产生的各类信息将不保存在.keystore文件中;

-keypass, 指定别名条目的密码(私钥的密码);

-storepass,指定密钥库的密码,获取keystore信息所需的密码;

-validity,指定创建的证书有效期多少天;

JDK命令keytool,查看秘钥库中的数字证书:

keytool -list -keystore c:/server.jks -storepass 123456

keytool -list -v -keystore c:/server.jks -storepass 123456

keytool -list -rfc -keystore c:/server.jks -storepass 123456

参数说明:

-list,列出秘钥库中的条目;

-v,列出秘钥库中的条目,详细输出;

-rfc,以RFC样式输出;

JDK命令keytool,将秘钥库JKS转换成PFX(pkcs12):

keytool -v -importkeystore -srckeystore c:/server.jks -srcstoretype jks -srcstorepass 123456 -destkeystore c:/server.pfx -deststoretype pkcs12 -deststorepass 123456 -destkeypass 123456

JDK命令keytool,导出公钥证书(crt格式PKCS12):

keytool -export -alias server -keystore c:/server.jks -file c:/server.crt -storepass 123456

keytool -export -alias client -keystore c:/server.jks -file c:/server.crt -storepass 123456

注:不能用导出文件的方式,直接导出证书的私钥。

标签: #java证书