码迷,mamicode.com
首页 > 其他好文 > 详细

证书生成和管理总结

时间:2015-08-11 23:16:22      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

一、OpenSSL工具管理证书

OpenSSL 是一个强大的安全套接字层密码库,包括了加密算法,常用密钥和证书管理,SSL协议等功能。OpenSSL提供的命令非常多,这里只简单列出OpenSSL生成密钥和证书的一些操作(Window需要以管理员身份运行cmd):

 

  • 生成PEM格式的密钥
openssl genrsa -out rsakey0.pem 2048

算法为rsa,长度为2048,保持到rsakey0.pem文件中。

 

 

openssl genrsa -des3 -out rootca.key 1024

使用DES3加密

 

  • 生成X509格式的自签名证书
openssl req -x509 -new -days 365 -key rsakey.pem -out cert0.crt

会要求输入区别名DN的各项信息(国家,城市,组织,姓名,email等)。

根证书是认证中心机构(Certificate Authority)给自己签发的证书,签发者就是自身,是信任链的起点。里面包含了CA信息、CA公钥、用自身的私钥对这些信息的签名。下载并使用根证书就表示你信任它的来源机构,自然也信任证书以下签发的所有证书。某个证书可以用签发他的证书中的公钥验证,签发他的证书又需要上一层签发证书来验证,直到通过根证书中的公钥验证,那么这个证书就是可信任的。

 

  • 生成要求根证书签发子证书的请求文件
openssl req -new -key rsakey1.pem -out subcertreq.csr

会要求输入区别名DN的各项信息(国家,城市,组织,姓名,email等),还需要额外属性:密码 和 可选公司名。

 

  • 使用根证书签发子证书
openssl x509 -req -in subcertreq.csr -CA cert0.crt -CAkey rsakey0.pem -CAcreateserial -days 365 -out subcert.crt

 

也可创建一个ca的配置文件,通过ca管理子命令来签发子证书(未试验)

 openssl ca -config ca.config -out user.crt -infiles user.csr

 

 

  • 将证书和密钥打包为pkcs12格式的库中
openssl pkcs12 -export -in subcert.crt -inkey rsakey1.pem -out subcert.p12

需要输入pkcs12文件密码。

 

 

  • 查看证书内容
openssl x509 -noout -text -in rootca.crt

 

  • 验证证书
 openssl verify -CAfile rootca.crt subcert.crt

用rootca.crt的公钥验证subcert.crt中的签名

 

  • 相关文件

OpenSSL生成的密钥文件(.pem),签发请求文件(.csr)和证书文件(.cet)都是用纯文本格式保存了Base64编码后的信息。可以用文本编辑器打开,内容如下:

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEArlUX2v998Y+Ek/AzoDdsbW7ILyRpwXVBMDqmOf3ZZpbP/4vo
.....省略若干行......
buL0a0BOFi7dyJjWgtEyYTFQgYSeezHl/+XyOhuJlTyvZWUpm5w=
-----END RSA PRIVATE KEY-----

首行和末尾行会被忽略,首行中显示了文件中存储的信息类型。

 

 

二、Keytool工具管理证书

keytool是Java提供的密钥、证书和证书库管理工具。可以完成生成密钥,生成证书等各种操作。

keytool的子命令如下:

-certreq     生成证书请求
-changealias    更改条目的别名
-delete      删除条目
-exportcert       导出证书
-genkeypair      生成密钥对
-genseckey       生成密钥
-gencert           根据证书请求生成证书
-importcert       导入证书或证书链
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd       更改条目的密钥口令
-list                  列出密钥库中的条目
-printcert          打印证书内容
-printcertreq     打印证书请求的内容
-printcrl           打印 CRL 文件的内容
-storepasswd    更改密钥库的存储口令

还可以使用 keytool -command_name -help 查看各个子命令的帮助信息

 

  • pkcs12库中证书导入jks证书库(java keystore格式)
keytool -importkeystore -srckeystore subcert.p12 -destkeystore subcert.jks -srcstoretype pkcs12

需要输入目标库的密码和源库的密码,如果jks库文件不存在的话会自动生成。

 

  • 导入证书到jks库
keytool -importcert -keystore subcert.jks -alias rootca -file rootcert.crt

需要输入目标库密码和是否信任添加的证书。-alias可以省略,如果jks库文件不存在的话会自动生成。

 

证书库或者说密钥库中即可以存放密钥也可存放证书,如果只包含证书(证书中有公钥)而不包含私钥,这样生成的库就是trust库。

 

 参考资料:

OppenSSL文档: https://www.openssl.org/docs/apps/openssl.html

Keytool文档:http://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html

 

http://zhtx168.blog.163.com/blog/static/41601548200812503248/

http://blog.csdn.net/kimylrong/article/details/43525333

证书生成和管理总结

标签:

原文地址:http://www.cnblogs.com/pixy/p/4722381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!