使用jdk生成自签发证书(过程总结)

前言:

最近在做华为NB-IoT接口开发,需要用到双向认证,就去学了一下。

然后我将过程总结了一下。

 

相关华为论坛链接:http://developer.huawei.com/ict/forum/thread-25457.html

里面一些ca.jks和outgoing.CertwithKey.pkcs12相关步骤能看懂就看,看不懂没关系。

 

一:为服务器生成证书
1. 找到jdk安装目录,运行控制台,切换到该目录:

2、使用keytool命令生成证书tomcat.keystore

keytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore -validity 36500

 

以下是命令的参数介绍

keytool 

-genkey 

-alias tomcat(别名) 

-keypass 123456(别名密码) 

-keyalg RSA(算法) 

-keysize 1024(密钥长度) 

-validity 365(有效期,天单位) 

-keystore tomcat.keystore(指定生成证书的位置和证书名称) 

-storepass 123456(获取keystore信息的密码)

二:为客户端生成证书
1. 生成客户端证书:client.p12(为浏览器生成证书,以便让服务器来验证它。为了能将证书顺利导入至IE和Firefox,证书格式应该是PKCS12)
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -validity 36500
三:让服务器信任客户端证书

由于不能直接将PKCS12格式的证书库导入,必须先把客户端证书导出为一个单独的CER文件

1. 将client.p12转换成client.cer;
keytool -export -alias client -keystore client.p12 -storetype PKCS12 -rfc -file client.cer
2. 将client.cer导入到tomcat的信任证书链中
keytool -import -alias client-v -file client.cer -keystore tomcat.keystore
 

完成之后通过list命令查看服务器的证书库,

可以看到两个证书,一个是服务器证书,一个是受信任的客户端证书:

keytool -list -v -keystore tomcat.keystore

四:让客户端信任服务器证书

由于是双向SSL认证

(1)、客户端也要验证服务器证书,因此,必须把服务器证书添加到浏览器的“受信任的根证书颁发机构”

(2)、服务器也要验证客户端提供的证书,因此,必须把client.p12证书添加到浏览器的“个人”证书里面(这步非常关键)。

由于不能直接将keystore格式的证书库导入,必须先把服务器证书导出为一个单独的CER文件

1. 把tomcat证书导出为tomcat.cer文件(导出根证书)
keytool -export -v -alias tomcat -file tomcat.cer -keystore tomcat.keystore

2、将tomcat.cer证书导入到受信任的根证书颁发机构,点击导入,按照步骤添加

然后一直下一步,最后选“是”

3、将client.p12添加到个人证书

然后一直下一步,最后选“是”。密码是之前生成客户端证书时候的密码。

五、配置tomcat的server.xml

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
               redirectPort="8443" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS"
               keystoreFile="C:\Program Files\Apache Software Foundation\Tomcat 8.5\tomcat.keystore" keystorePass="123456"
               truststoreFile="C:\Program Files\Apache Software Foundation\Tomcat 8.5\tomcat.keystore" truststorePass="123456"
               />
Connector标签中的属性说明:
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码
 
最后访问8080端口,试下双向是否成功,然后将clientAuth=“false”试下单向认证。博主试过了可以成功。
 
不懂欢迎提问!尽力解答
 
最后附上权威机构颁发证书的认证方法(单向认证):http://www.cnblogs.com/longLifeFrog/p/9067147.html

posted on 2018-05-22 10:29  康纳酱  阅读(8482)  评论(7编辑  收藏  举报

导航