本文为博主原创,未经允许不得转载:

  1. key store 与 trust store 区别

  2. java 配置 单向认证与双向认证的过程

  3. key store 与 trust store 常用命令

  4. tomcat , zookeeper 配置 双向认证过程

1. key store 与 trust store 区别

  keystore是存储密钥(公钥、私钥)的容器。

  keystore和truststore其本质都是keystore。只不过二者存放的密钥所有者不同而已。本质都是相同的文件,只不过约定通过文件名称区分类型以及用途

  对于keystore一般存储自己的私钥和公钥,而truststore则用来存储自己信任的对象的公钥。

2. 单向认证与双向认证

  单向认证:

    单向认证是客户端验证服务端的真伪性,所以需要将服务器端的证书server.crt导出,导出的server.crt就是服务器端的公钥。然后将 server.crt 导入到客户端的 trustore 中。这样服务器就被客户端信任了,连接时客户端使用服务器端的公钥去验证服务器。

  双向认证:

    服务器的公钥导入到客户端的truststore,客户端的公钥导入到服务器端的truststore中。

    客户端请求服务器端,服务器端通过预置有客户端证书的 trust store 验证客户端的证书,如果证书被信任,则验证通过

    服务器端响应客户端,客户端通过预置有服务端证书的 trust store 验证服务端的证书,如果证书被信任,则验证通过,完成一个双向认证过程。

  java 在jdk 中已经默认在 $JAVA_HOME/lib/security/cacerts 这个文件中预置了常用的 证书

                                                             

3. key store 与 trust store 常用的命令:

  3.1 创建证书

keytool -genkeypair -alias "test1" -keyalg "RSA" -keystore test.keystore.jks    

    -genkeypair:生成一对非对称密钥;

    -alias:指定密钥对的别名,该别名是公开的;
    -keyalg:指定加密算法,本例中的采用通用的RAS加密算法;

    -keystore:密钥库的路径及名称,不指定的话,默认在操作系统的用户目录下生成一个".keystore"的文件

  3.2 查看 Keystore 的内容

keytool -list -v -keystore test.keystore.jks

  3.3 添加一个信任根证书到keystore文件

keytool -import -alias newroot -file root.crt -keystore test.keystore.jks

  3.4 导出 jks 的证书文件到指定文件 

keytool -export -alias alias_name -keystore test.keystore.jks -rfc -file test.cer

  3.5 删除jks 中指定别名的证书

keytool -delete -keystore test.keystore.jks -alias alias_name

4. tomcat 配置 ssl 认证

  打开server.xml,找到

<!--

  <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  maxThreads="150" scheme="https" secure="true"  clientAuth="false" sslProtocol="TLS" />

-->

这样一段注释,在这段注释下面添加如下一段代码:

<Connector SSLEnabled="true" acceptCount="100" clientAuth="false"

disableUploadTimeout="true"

enableLookups="false" maxThreads="25"

port="8443" keystoreFile="D:\developTools\apache-tomcat-idm\tomcat.keystore" keystorePass="111111"

protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"

secure="true" sslProtocol="TLS" />

  其中clientAuth=”false”表示是SSL单向认证,即服务端认证,port=”8443”是https的访问端口,keystoreFile="D:\developTools\apache-tomcat-idm\tomcat.keystore"是第一步中生成的keystore的保存路径,keystorePass="111111"是第一步生成的keystore的密码。

  为了验证是否已经配置正确,我们可以在浏览器中进行验证。首先启动tomcat,然后在浏览器地址输入栏中输入:https://localhost:8443。会提示网站证书不受信任,需要手动点击确定。

keystore 与 trust store 的区别 及 keytool 常用命令的更多相关文章

  1. 数字证书管理工具keytool常用命令介绍

    需要给一个apk加签名,用到了keytool这个工具,下面转载一篇介绍keytool的文章 http://blog.chinaunix.net/uid-17102734-id-2830223.html ...

  2. Git:SSH、SSH与HTTP区别、git常用命令

    SSH1.首先需要检查你电脑是否已经有 SSH key cd ~/.sshls12.ssh表示ssh文件是个隐藏文件查看是否存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在 ...

  3. maven跳过单元测试-maven.test.skip和skipTests的区别以及部分常用命令

    -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下. -Dmaven.test.skip=true,不执行测试用例,也不编译测试 ...

  4. Git常用命令及使用,GitLab/GitHub初探,Git/Svn区别

    Git安装配置及常用命令 0 Git本地分支管理 1 Git远程分支管理 2 Git Tag标签管理 3 Git Log日志 4 其它高级命令 5 常规使用及介绍 6 角色权限 7 分支定义 8 一般 ...

  5. keytool常用操作

    keytool 秘钥需要存储在秘钥库中,秘钥库可以理解为一个存储了一个或多个秘钥的文件.一个秘钥库可以存储多个密钥对,每个秘钥对你都需要给他们取一个名字. D:\software\Java\jdk1. ...

  6. maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

    maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository. ...

  7. Docker for Windows(三)Docker镜像与容器的区别&常用命令

    Docker镜像(Image)是一堆只读文件(read-only layer),容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是 ...

  8. su和sudo的区别与使用,su命令,linux命令

    su和sudo的区别与使用 一.   使用 su 命令临时切换用户身份 1. su 的适用条件和威力 su命令就是切换用户 的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务, ...

  9. 每天一个linux常用命令--ls 和 -ll 有什么区别?

    一.-ls 和 -ll  有什么区别? 1. ls 命令可以说是linux下最常用的命令之一.ll不是命令,是ls -l的别名相当于windows里的快捷方式.所以"ll"和“ls ...

  10. 【转】exec xargs的区别 另附eval命令介绍

    -exec:  对符合条件的文件执行所给的Linux 命令,执行exec后面的shell脚本.脚本中,{}表示命令的参数即为所找到的文件,以:表示comman命令的结束.\是转义符,因为分号在命令中还 ...

随机推荐

  1. Android联系人增删改查

    1:申请权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-p ...

  2. MyBatis中使用#{}和${}占位符传递参数的各种报错信息处理

    在Mapper层使@Select注解进行SQL语句查询时,往往需要进行参数传入和拼接,一般情况下使用两种占位符#{参数名}和${参数名},两者的区别为: 一.两种占位符的区别 1.参数传入方式的区别 ...

  3. 全域Serverless化,华为云引领下一代云计算新范式

    本文分享自华为云社区<全域Serverless化,华为云引领下一代云计算新范式>,作者: 华为云PaaS服务小智 . 近日,华为开发者大会2023(Cloud)在东莞成功举办,期间&quo ...

  4. 基于Fabric的性能测试与调优实践

    摘要:本文聚焦Fabric核心业务,构建一个测试模型,对社区原生的Fabric和华为云区块链(基于Fabric)进行实测,识别社区原生Fabric的性能瓶颈,并尝试通过华为区块链提供的动态伸缩.快速P ...

  5. mysql新增数据库新增用户并授权用户

    -- 创建数据库CREATE DATABASE  baseName; -- 创建用户CREATE USER 'userName' @ '访问限制' IDENTIFIED BY 'password'; ...

  6. 无法安装此app,因为无法验证其完整性 ,解决方案

    最近有很多兄弟萌跟我反应"无法安装此app,因为无法验证其完整性 ",看来这个问题无法避免了,今天统一回复下,出现提示主要有以下几种可能 1.安装包不完整 首先申请我所有分享的破解 ...

  7. PPT 没有电脑如何制作PPT

    没有电脑如何制作PPT

  8. 我“采访”了 ChatGPT

    我"采访"了 ChatGPT 大家好,我是准备认真码字的**老章:. 最近ChatGPT火的爆表,看了很多相关文章,特别焦虑,唯恐自己的进步赶不上 AI 的发展. 还有就是我非常看 ...

  9. Ajax请求 content_type ajax发送Fromdata对象

    目录 Ajax请求入门 ajax实现简单计算器 content_type urlencode fromdata application/json 自定义request.JSON ajax发送Fromd ...

  10. JS 闭包 BUG

    C.js代码: /** * 有BUG */ (function (global) { var _id; var _map; var _length; global.C = function () { ...