用Keytool和OpenSSL生成和签发数字证书【转】

[size=medium]一)[color=blue]keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书[/color]
J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密钥、证书和证书链。Keytool工具的命令在JavaSE6中已经改变,不过以前的命令仍然支持。Keytool也可以用来管理对称加密算法中的密钥。
最简单的命令是生成一个自签名的证书,并把它放到指定的keystore文件中:

[i][color=red][b]keytool -genkey -alias tomcat -keyalg RSA -keystore c:/mykey[/b][/color][/i]

如果c:/mykey文件不存在,keytool会生成这个文件。按照命令的提示,回答一系列问题,就生成了数字证书。注意,公共名称(cn)应该是服务器的域名。这样keystore中就存在一个别名为tomcat的实体,它包括公钥、私钥和证书。这个证书是自签名的。<o:p></o:p>

Keytool工具可以从keystore中导出证书,但是不能导出私钥。对于配置apache这样的服务器,就不太方便。这种情况下就完全用OpenSSL吧,下面将会介绍。不过keytool对于J2EE AppServer是很有用的,它们就是用keystore存储证书链的。keystore的作用类似于windows存放证书的方式,不过跨平台了,^_^下面用Keytool生成CSR(Certificate Signing Request),并用OpenSSL生成CA签名的证书。

1. 准备
1) 在bin目录下新建目录 demoCA、demoCA/certs、demoCA/certs 、 demoCA/newcerts
2) 在demoCA建立一个空文件 index.txt
3) 在demoCA建立一个文本文件 serial, 没有扩展名,内容是一个合法的16进制数字,例如 0000
4) 配置环境变量PATH,加入%JAVA_HOME%/bin,本文用的JavaSDK1.6

2. 生成CA的自签名证书

[i][color=red][b]openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf[/b][/color][/i]

3. 生成server端证书
1) 生成KeyPair生成密钥对
[i][color=red][b] keytool -genkey -alias tomcat_server -validity 365 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -keystore server_keystore[/b][/color][/i]

输入common name时,要和服务器的域名保持一致。
2) 生成证书签名请求

[color=red][i][b]keytool -certreq -alias tomcat_server -sigalg MD5withRSA -file tomcat_server.csr -keypass 123456 -storepass 123456 -keystore server_keystore [/b][/i][/color]

3) 用CA私钥进行签名,也可以到权威机构申请CA签名。

[color=red][i][b]openssl ca -in tomcat_server.csr -out tomcat_server.crt -cert ca.crt -keyfile ca.key -notext -config openssl.cnf[/b][/i][/color]

其中-notext表示不要把证书文件的明文内容输出到文件中去,否则在后面用keytool导入到keystore时会出错。
4) 导入信任的CA根证书到keystore

[color=red][i][b]keytool -import -v -trustcacerts -alias my_ca_root -file ca.crt -storepass 123456 -keystore server_keystore[/b][/i][/color]

5) 把CA签名后的server端证书导入keystore

[color=red][i][b]keytool -import -v -alias tomcat_server -file tomcat_server.crt -storepass 123456 -keystore server_keystore[/b][/i][/color]

6) 查看server端证书

[color=red][i][b]keytool -list -v -keystore server_keystore [/b][/i][/color]

可以看到tomcat_server的证书链长度是2

4. 生成client端证书
1) 生成客户端CSR

[color=red][i][b] openssl genrsa -des3 -out tomcat_client.key 1024
openssl req -new -key tomcat_client.key -out tomcat_client.csr -config openssl.cnf[/b][/i][/color]

2) 用CA私钥进行签名,也可以到权威机构申请CA签名
[color=red][i][b]openssl ca -in tomcat_client.csr -out tomcat_client.crt -cert ca.crt -keyfile ca.key -notext -config openssl.cnf[/b][/i][/color]

3) 生成PKCS12格式证书
[color=red][i][b]openssl pkcs12 -export -inkey tomcat_client.key -in tomcat_client.crt -out tomcat_client.p12[/b][/i][/color]

4) 使用Keytool列出pkcs12证书的内容:

[color=red][i][b] keytool -rfc -list -keystore tomcat_client.p12 -storetype pkcs12[/b][/i][/color]

[color=blue]

二)openssl生成私钥文件(.key)和签名请求文件(.csr),以及签发数字证书[/color]

操作目录是openssl/bin(没办法改不了环境变量,如果你可以改的话,就不用在这个目录下工作了),为了方便本人把apps下的openssl.cnf也复制到了这个目录下来。文件名都是以本人使用的来说了:
1.首先要生成服务器端的私钥(key文件):
[color=red][i][b]openssl genrsa -des3 -out server.key 1024[/b][/i][/color]
运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!
去除key文件口令的命令:
[color=red][i][b]openssl rsa -in server.key -out server.key[/b][/i][/color]

2.[color=red][i][b]openssl req -new -key server.key -out server.csr -config openssl.cnf[/b][/i][/color]

生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可.

3.对客户端也作同样的命令生成key及csr文件:
[color=red][i][b]openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr -config openssl.cnf[/b][/i][/color]

4.CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.
[color=red][i][b]openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf[/b][/i][/color]

5.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:
[color=red][i][b]Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf[/b][/i][/color]
现在我们所需的全部文件便生成了.

另:
client使用的文件有:ca.crt,client.crt,client.key
server使用的文件有:ca.crt,server.crt,server.key
.crt文件和.key可以合到一个文件里面,本人把2个文件合成了一个.pem文件(直接拷贝过去就行了)
---------------------------------------------------
合并证书文件(crt)和私钥文件(key):

#cat client.crt client.key > client.pem
#cat server.crt server.key > server.pem
[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值