用keytool制作证书并在tomcat配置https服务(一)

用keytool制作证书并在tomcat配置https服务(二)

用keytool制作证书并在tomcat配置https服务(三)

上一篇我们实现了服务端自己模拟CA认证,那么有个问题。

一个客户端和服务端对接就需要把这个客户端的证书拿来导入到服务端的密钥库中。那么很多客户端要对接,就要多次导入。

可以这样,让客户端发送证书的csr文件给我们,我们用模拟的CA密钥库对客户端证书也进行签名颁发。

然后把签名后的证书发送给他,让他自己导入到自己的客户端密钥库里【也需要先导入根证书,再导入签名证书】。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

这样的话https交互时,

服务端发送签名证书给客户端:客户端能用安装在浏览器中的【受信任的颁发机构】中的rootca.cer根证书进行验证。

客户端发送签名证书给服务端:服务端也能用信任的库里的rootca根证书对客户端发来签名证书进行校验。

为了清晰点,从头开始做,就不展示图片了。

服务端:

1.创建CA库,用于对证书签名

keytool -genkey -alias rootca -keypass 123456 -keyalg RSA -keysize 2048 -validity 365 -storetype JKS -keystore D:/ssl/castore.jks -storepass 123456

2.创建服务端密钥库

keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 2048 -validity 365 -storetype JKS -keystore D:/ssl/keystore.jks -storepass 123456

3.创建服务端证书签名请求文件

keytool -certreq -keyalg RSA -alias tomcat -sigalg SHA256withRSA -keystore D:/ssl/keystore.jks -file D:/ssl/serverreq.csr

4.CA库对服务端证书进行签名,生成一个证书文件

keytool -gencert -alias rootca -keystore D:/ssl/castore.jks -infile D:/ssl/serverreq.csr -outfile D:/ssl/signedserver.cer

5.从CA库导出rootca根证书

keytool -export -alias rootca -keystore D:/ssl/castore.jks -storetype JKS -keypass 123456 -file D:/ssl/rootca.cer

6.将rootca导入到服务端密钥库

keytool -import -v -alias rootca -file D:/ssl/rootca.cer  -keystore D:/ssl/keystore.jks

7.将服务端签名证书导入到服务端的密钥库,覆盖原证书。

keytool -import -v -alias tomcat -file D:/ssl/signedserver.cer  -keystore D:/ssl/keystore.jks

8.tomcat的server.xml添加配置【clientAutl=true,双向认证】

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="D:/ssl/keystore.jks"
keystorePass="123456"
truststoreFile="D:/ssl/keystore.jks"
truststorePass="123456"
clientAuth="true" sslProtocol="TLS" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" />

客户端:

1.创建客户端密钥库

keytool -genkey -alias client -keypass 123456 -keyalg RSA -keysize 2048 -validity 365 -storetype JKS -keystore D:/ssl/client.jks -storepass 123456

2.创建客户端证书签名请求文件

keytool -certreq -keyalg RSA -alias client -sigalg SHA256withRSA -keystore D:/ssl/client.jks -file D:/ssl/clientreq.csr

3.把客户端证书签名请求文件clientreq.csr发送给服务端,服务端的模拟CA密钥库对证书进行签名,生成一个证书文件【以下这条是服务端执行】

keytool -gencert -alias rootca -keystore D:/ssl/castore.jks -infile D:/ssl/clientreq.csr -outfile D:/ssl/signedclient.cer

4.服务端把生成的客户端签名文件signedclient.cer和根证书rootca.cer发送给客户,客户端导入密钥库。还是先导入根证书,再导入签名证书。

keytool -import -v -alias rootca -file D:/ssl/rootca.cer  -keystore D:/ssl/client.jks
keytool -import -v -alias client -file D:/ssl/signedclient.cer  -keystore D:/ssl/client.jks

5.浏览器不支持jks,所以把客户端的jks库转为p12格式库。

keytool -importkeystore -srckeystore D:/ssl/client.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore D:/ssl/client.p12

6.将客户端密钥库client.p12导入到浏览器-证书-个人

7.将rootca.cer导入到浏览器-证书-受信任的证书颁发机构

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

启动tomcat,访问成功

查看下服务端证书是不是这个

keytool -list -v -keystore D:/ssl/keystore.jks

备注:我们看到tomcat的server.xml配置有个keystoreFile和truststoreFile

  keystoreFile是用来向客户端发送服务端证书的库配置。

  truststoreFile是用来存放信任证书的库位置。用来校验客户端发来的证书是不是受信任的。

        上边的例子我们都存在了keystore.jks,因为里边就有rootca,可以进行验证。

        不嫌麻烦的话,我们可以单独创建一个库trustkeystore.jks,存放rootca,然后tomcat的server配置修改下路径就好了。

  还有理论上说keytool创建的库密码和密钥对的密码可以不一样。但是tomcat这里只留有一个密钥库密码输入参数,所以最好创建库密码和密钥对密码一致。

        

用keytool制作证书并在tomcat配置https服务(四)的更多相关文章

  1. 用keytool制作证书并在tomcat配置https服务(二 )

    用keytool制作证书并在tomcat配置https服务(一) 双向认证: 我们上边生成了服务端证书,并发送给客户端进行了验证. 双向认证是双向的,因此还差客户端证书. 1.为方便导入浏览器,生成p ...

  2. 用keytool制作证书并在tomcat配置https服务(一)

    https分为单项认证和双向认证. 一般https页面上的访问都是单项认证,服务端发送数字证书给客户端,客户单方面验证.而服务端不做验证. 而双向认证,需要双方都有证书,然后发送给对方进行验证.一般用 ...

  3. 用keytool制作证书并在tomcat配置https服务(三)

    用keytool制作证书并在tomcat配置https服务(一) 用keytool制作证书并在tomcat配置https服务(二) 用keytool制作证书并在tomcat配置https服务(四) 模 ...

  4. tomcat配置https–采用JDK自带的keytool工具生成证书

    转自:http://blog.csdn.net/huangxinyu_it/article/details/41693633 有关http与https的区别请看<浅谈http与https的区别( ...

  5. 用tomcat配置https自签名证书,解决 ios7.1以上系统, 苹果inHouse发布

    用tomcat配置https自签名证书,解决 ios7.1以上系统苹果inHouse发布不能下载安装的问题教程,话说,我其实最讨厌配置某某环境了,因为某一个小环节一旦出错,你的所有工作往往会功亏一篑, ...

  6. tomcat配置https以及配置完成后提示服务器缺少中间证书(已解决)

    #### tomcat配置https 准备工作 下载好证书文件,下载的时候可以选择为tomcat文件.我这下载下来是压缩包.解压后就是下图的样子. 以.key结尾的文件是证书的key 以.pem结尾的 ...

  7. tomcat配置https协议

    tomcat配置https协议 1.找到本地jdk底下的bin目录,bin目录底下存在文件keytool.exe(在bin目录下空白处,按住shift右击,打开命令窗口,如下图) 2.在cmd的命令窗 ...

  8. Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置

    Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置 ============================== ©Copyright 蕃薯耀 2017 ...

  9. Nginx、Tomcat配置https

    一.Nginx.Tomcat配置https 前提就是已经得到了CA机构颁发的证书 一.合并证书 1.假设证书文件如下 秘钥文件server.key,证书CACertificate-INTERMEDIA ...

随机推荐

  1. ode45求解微分方程(MATLAB)

    首先介绍一下ode45的格式: [t,y] = ode45(odefun,tspan,y0) [t,y] = ode45(odefun,tspan,y0,options) [t,y,te,ye,ie] ...

  2. <div>里用display:block有用么?

    对所有的块元素都没有意义,块元素的dispaly属性默认值为block,没必要再显式定义--除非你之前对块元素的display属性重新定义过. =========================== ...

  3. 九度oj题目1027:欧拉回路

    题目1027:欧拉回路 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2844 解决:1432 题目描述:     欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条 ...

  4. HDU 5222 ——Exploration——————【并查集+拓扑排序判有向环】

    Exploration Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  5. 介绍几种搭建Dojo环境的方法

    Hello World! 的时间到了,在你所学过的众多语言中,哪个不是从此学起的呢?但在此之前,我们要先构建一个开发环境,如同刚开始学习Java的时候,还是需要我们先安装JDK.配置好环境变量等等,H ...

  6. SpringSecurity 3.2入门(3)单用户登录

    1.增加web.xml文件配置如下 <!-- 获取Spring Security session的生命周期,这个监听器会在 session 创建和销毁的时候通知 Spring Security ...

  7. PAT 1059. Prime Factors

    反正知道了就是知道,不知道也想不到,很快 #include <cstdio> #include <cstdlib> #include <vector> using ...

  8. Java集合篇三:Vector

    package com.test.collection; import java.util.Vector; public class MyVector { /** * @param args */ p ...

  9. LI居中

    在用UL-LI时,有适合需要将Li里面的内容居中显示:方法有两种:(推荐)1.设置LI的display为inline(规定应该从父元素继承 display 属性的值),为LI设置长度,设置text-a ...

  10. 前端之CSS——CSS选择器

    一.CSS介绍 为什么需要CSS(CSS的作用)? 在没有CSS之前,我们想要修改HTML元素的样式需要为每个HTML元素单独定义样式属性,当HTML内容非常多时,就会定义很多重复的样式属性,并且修改 ...