Tomcat 实现双向SSL认证

大概思路:

使用openssl生产CA证书,使用keytool生产密钥库

1、生成CA密钥

genrsa [产生密钥命令] -des3 [加密算法] -out[密钥文件输出路径] 512 [密钥位数]

openssl genrsa -des3 -out root.key 512

可通过下面语句清除密码

openssl rsa -in root.key -out root.key

2、生成CA证书请求文件

req[产生证书命令] -new[新生成] -key[私钥文件路径] -out[证书文件输出路径]

openssl req -new -key root.key -out root.csr

3、生成CA证书(自签名)root.crt

x509[签发x509证书命令] -req[输入待签发证书] -days[证书有效期] -signkey[自签发密钥文件路径]

-in[输入待签发证书文件路径] -out[产生x509证书文件输出路径]

openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey root.key -in root.csr -out root.crt

二、生成服务器端证书

1、生成密钥对

-certreq[产生待签名证书] -alias[证书别名] -sigalg[证书算法参数] -file [产生文件输出路径]

-keypass[密钥保护密码] -keystore[存储文件路径] -storepass[存储密码]

keytool -certreq -alias server -sigalg MD5withRSA -file server.csr -keypass tomcat -keystore server.jks -storepass tomcat

3、使用CA证书为服务器证书签名

-alias[服务器证书的别名] -file[证书文件路径] -keystore[导入文件路径] -noprompt[不提示”您仍然想要将它添加到自己的keystore 吗?”]

keytool -import -v -trustcacerts -storepass tomcat -keypass tomcat -alias server-ca -file root.crt -keystore servertrust.jks

到这一步产生两个密钥库文件:server.jks、servertrust.jks,在tomcat的SSL配置中会用到,这里的两个密钥文件可以合并为一个,也就是将CA和服务器证书导入同一个密钥文件,然后客户端证书也导入该文件,这样在修改tomcat配置时,密钥文件和信任密钥文件就可以指定为同一个文件了。

四、修改TOMCAT配置

修改conf/server.xml配置文件如下:

maxThreads=”150″ SSLEnabled=”true” scheme=”https” secure=”true”

keystoreFile=”conf/server.jks” keystorePass=”tomcat”

truststoreFile=”conf/servertrust.jks” truststorePass=”tomcat”

clientAuth=”flase” sslProtocol=”TLS” />

现在就已经实现了tomcat单向SSL认证了,若要实现双向认证,需要将clientAuth值改为true。

五、生成客户端证书

1、生成客户端密钥

genrsa [产生密钥命令] -out[密钥文件输出路径] 512 [密钥位数]

openssl genrsa -des3 -out client.key 512

2、生成客户端证书申请文件

req[产生证书命令] -new[新生成] -out[证书文件输出路径] -key[私钥文件路径]

openssl req -new -out client.csr -key client.key

3、使用CA证书为客户端证书签名

x509[签发x509证书命令] -req[输入待签发证书] -in[输入待签发证书文件路径] -out[产生x509证书文件输出路径]
-signkey [密钥文件路径]
-CA[签发根证书] -CAkey[根证书密钥文件] -days[证书有效期] -CAserial[CA序列号文件]

openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA root.crt -CAkey root.key -days 365 -CAserial root.serial

4、将客户端证书导出为windows可识别的格式.p12

pkcs12[生成PKS12格式证书命令] -export[导出文件] -clerts[仅导出client证书]
-in[输入的client证书文件路径] -inkey[client证书密钥文件路径] -out[导出PKS12格式文件路径]

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

在导出时可以设置密码,只有知道该密码才能将证书导入浏览器。

5、将签名之后的证书文件client.crt导入至信任秘钥库中(这里由于没有去ca认证中心购买个人证书,所以只有导入信任库才可进行双向ssl交互,实验亲自验证过)
keytool -import -alias client -trustcacerts -storepass tomcat -file client.crt -keystore servertrust.jks

重新拷贝信任密钥库文件servertrust.jks到tomcat配置文件指定的位置

六、安装客户端证书并修改tomcat配置

1、将p12格式的客户端证书导入浏览器(双击安装即可)

2、将tomcat SSL配置部分clientAuth值改为”true”。

3、实现SSL双向认证

由于这里的证书均是自己生成的,所以浏览器会提示证书错误类的字样属于正常现象。

Original: https://www.cnblogs.com/Before/p/4244167.html
Author: lzc_jack
Title: Tomcat 实现双向SSL认证

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612371/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Windows 11 绕过 TPM 方法

    在 Windows 11 安装界面按 Shift + F10 打开命令行界面,执行如下命令: REG ADD HKLM\SYSTEM\Setup\LabConfig /v Bypa…

    Linux 2023年6月13日
    0121
  • 09_Linux基础-SHELL-标准输入与标准输出-重定向-管道

    09_Linux基础-SHELL-标准输入与标准输出-重定向-管道 博客🔗:https://blog.csdn.net/cpen_web 作&#x4E…

    Linux 2023年6月6日
    0115
  • 文件夹图标修改软件 FolderIco

    本来文件夹图标是可以自定义的,只要找好图片,在软件中把图片格式转换成ico,再在文件夹属性中设置图标就可以了。 但是我发现转换出来的ico不够清晰,只有256*256,在大图标模式…

    Linux 2023年6月6日
    0134
  • podman

    podman Podman 是一个无守护程序、开源的 Linux 原生工具,旨在使用开放容器计划 (OCI) 容器和容器映像轻松查找、运行、构建、共享和部署应用程序。Podman …

    Linux 2023年6月7日
    083
  • 编程模式-表驱动编程

    刚开始编程时,往往会碰到一些根据不同条件执行不同功能的情况,通常都是采用if-else或者switch-case的方式,如果有很多的情况需要区分,则会有很多的 else if 或者…

    Linux 2023年6月7日
    0129
  • SpringBoot + Vue + ElementUI 实现后台管理系统模板 — 后端篇(四): 整合阿里云 短信服务、整合 JWT 单点登录

    (1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 — 前端篇(一):搭建基本环境:https://www.cnblogs.c…

    Linux 2023年6月11日
    0121
  • Python中str()和repr()的区别

    其实用处就是最大的区别了:str()主要用来为终端用户输出一些信息,而repr()主要用来调试;同时后者的目标是为了消除一些歧义(例如浮点数的精度问题),前者主要为了可读。 In …

    Linux 2023年6月8日
    0131
  • Golang 实现 Redis(6): 实现 pipeline 模式的 redis 客户端

    本文是使用 golang 实现 redis 系列的第六篇, 将介绍如何实现一个 Pipeline 模式的 Redis 客户端。 通常 TCP 客户端的通信模式都是阻塞式的: 客户端…

    Linux 2023年5月28日
    0101
  • 编程入门之字符编码与乱码

    ——”为什么服务器收到的请求或者打开的文本文件有时会乱码?” ——”因为编码不对。” ——”编码的本质是什么?为什么编码…

    Linux 2023年6月13日
    0107
  • MTSP问题的简单介绍

    1. TSP问题与MTSP问题 1.1 TSP与MTSP问题的介绍: TSP:是指旅行家(1名)要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的 路程最短…

    Linux 2023年6月14日
    0247
  • 如何在EMACS 设置格式

    如何设置Emacs的各种模式, 这个教程要观摩一下的 http://www.emacswiki.org/emacs/IndentingC#toc1 Original: https:…

    Linux 2023年6月14日
    0122
  • 多级缓存-redis缓存预热

    冷启动:服务刚刚启动时,Redis中并没有缓存,如果所有商品数据都在第一次查询时添加缓存,可能会给数据库带来较大压力。 缓存预热:在实际开发中,我们可以利用大数据统计用户访问的热点…

    Linux 2023年5月28日
    0106
  • 三少玩Linux之LinuxMint, win7共存安装与简单配置

    先安装win7, 这里就不说了;再安装Mint, 这个是视频:https://www.bilibili.com/video/BV1AE411P7Cz; 这里关键就是LinuxMin…

    Linux 2023年6月14日
    0130
  • JavaScript 做的网页版扫雷小游戏

    闲来无事做了个网页版扫雷小游戏,基本实现了扫雷客户端的全部功能。但是感觉面向对象用的还不是很好,有待优化。 游戏地址:http://twgdh.com/saolei/index.h…

    Linux 2023年6月13日
    0142
  • MybatisPlus拓展——实现多数据源操作

    多数据源 适用:一般工作时候会有多个数据库,每个库对应不同的业务数据。程序如果每次数据都访问同一个数据库,该数据库压力很大访问会很慢。 1、导入依赖 com.baomidou dy…

    Linux 2023年6月7日
    096
  • 1.1 操作系统是什么,操作系统概述

    好的开始是成功的一半。学习 Linux 的第一个问题是搞明白 Linux 是什么,了解其来龙去脉、前世今生,知道其发展趋势、应用前景,弄清楚为什么学习它,以及如何掌握它和使用它,知…

    Linux 2023年5月27日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球