SSLSocket通信里面需要用到几个证书,生成步骤就这里写。
首先服务器用的是Tomcat,生成工具直接用Tomcat里面的keytool就好了。(正式商用的时候还是付费买个证书吧,自签的证书服务端的验证好像说是客户端决定信不信任而已)
生成步骤
一、生成服务端证书
(1)win+R 然后打开cmd
(2)进去之后cd 路径 到jdk安装位置里面的bin目录里面
cd C:\Program Files\Java\jdk1.8.0_31\bin |
(3)打开keytool生成证书
keytool -genkey -v -alias sever -keyalg RSA -keystore C:\Users\Otto\Desktop\cert\server.keystore |
server.keystore后面可以加 -validity 365,以此规定证书有效期,数字是多少就代表多少天(上面的语句表示365天),不加这个就默认90天;alias后面的server是证书自定义名字,要跟最后那个证书生成路径里面生成证书的名字对得上。
这一步操作如下:
您的名字与姓氏时候什么?这一块填写的东西必须是外网访问这一个服务器的ip或者网址,本地测试的时候直接localhost就好了,不用管。
二、生成客户端证书
(1)同样,cd进去jdk的bin目录,然后用keytool生成证书
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore C:\Users\Otto\Desktop\cert\client.p12 |
这里格式最好用PKCS12,具体原因不知道,估计是方便浏览器加载证书。
这一步操作如下:
到这里就没什么讲究了。
三、服务端信任客户端证书
说白了就是把客户端证书添加到服务端的证书库里面去
(1)证书库用的是cer格式的证书,所以客户端那个p12格式的就要转换一下格式
keytool -export -alias client -keystore C:\Users\Otto\Desktop\cert\client.p12 -storetype PKCS12 -storepass 22222wwwww -rfc -file C:\Users\Otto\Desktop\cert\client.cer |
这里alias啊密码啊路径啊都不要写错了,写错就不行了。
这一步操作如下:
(2)把刚刚生成的cer证书导入到服务端的证书库,添加为信任证书
keytool -import -v -file C:\Users\Otto\Desktop\cert\client.cer -keystore C:\Users\Otto\Desktop\cert\server.keystore |
这一步操作如下:
(3)查看服务器的证书库,就看看服务端证书库而已
keytool -list -keystore C:\Users\Otto\Desktop\cert\server.keystore |
这一步操作如下:
四、客户端信任服务端证书
(1)服务端证书倒过来生成个cer格式的,给客户端导入证书库
keytool -keystore C:\Users\Otto\Desktop\cert\server.keystore -export -alias server -file C:\Users\Otto\Desktop\cert\server.cer |
五、生成的证书
六、Tomcat服务器设置(这个很重要)
文件夹去到tomcat目录下的/conf/server.xml里面,把Connector那一段的注释去掉,然后改成如图的样子:
七、客户端安装一下证书
(1)双击client.p12,安装证书。
(2)把server.cer添加到“受信任的根证书颁发机构”(针对自签和本地测试的时候提示“此网站安全证书有问题”)
基本就这样了,顺着来做就好了,个人习惯先做服务端的步骤然后再做客户端的步骤(就好像写的程序那样,先写好服务端,运行好服务端,再去搞客户端)
推荐阅读: SSL证书生成解决方法 自签名SSL证书的生成