当前位置: 首页 > news >正文

TLS/SSL证书彻底扫盲

证书格式

  • pem
    • Privacy Enhanced Mail
    • 文本格式,以 -----BEGIN CERTIFICATE----- 开头,以-----END CERTIFICATE-----结尾
  • der
    • 二进制格式,只保存证书,不保存私钥
    • java和window服务器常见
  • pfx/p12
    • Predecessor of PKCS#12
    • 二进制格式,同时包含证书和私钥,一般有密码保护
    • 一般用于 Windows 上的 IIS 服务器
  • crt
    • Certificate 的简称,有可能是 PEM 编码格式,也有可能是 DER 编码格式
    • 可以是二进制格式,可以是文本格式
  • jks
    • Java Key Storage
    • 二进制格式,同时包含证书和私钥,一般有密码保护
    • 通过java内置工具keytool生成
  • bks
    • 安卓用的格式,与jks类似
  • csr
    • Certificate Signing Request 证书签名请求
keytool生成的证书默认是自签名的,也就是说它们不受任何公共证书颁发机构(CA)的信任。 这种证书在开发和测试环境中非常有用,但在生产环境中,最好使用由受信任的CA颁发的证书,以确保通信的安全性和可靠性。

keytool -genkey 和 -genkeypair 区别是什么
keytool命令中的-genkey和-genkeypair选项都用于生成密钥对和证书,但是它们的实现方式略有不同。

参数说明
genkey选项用于生成密钥对和自签名证书。它将提示您提供与密钥对和证书相关的信息,例如密钥密码、证书主题名称等生成的证书将是自签名的,这意味着它未经过任何CA的签名。该选项通常用于在测试或开发环境中生成自签名证书。
genkeypair选项也用于生成密钥对和证书,但是它不会自动为证书签名。相反,它会生成一个证书签名请求(CSR),您需要将此CSR发送给受信任的CA以获取由CA签名的证书。

二、双向认证 自签证书生成

Keystore和Truststore区别:
Keystore用于通信,进行加解密
Truststore用于认证,认证对方是否有效

要使用keytool命令生成自签名的Keystore和Truststore,使其满足双向认证,可以按照以下步骤进行:

1. 生成服务端Keystore,包含服务端私钥和自签名证书。

keytool -genkey -alias server -keyalg RSA -keysize 2048 -validity 365 -keystore server_keystore.jks

在运行此命令时,您需要设置服务端私钥的密码以及一些与证书相关的信息,例如组织名称、所在城市等。

2. 导出服务端证书,生成证书文件。

keytool -export -alias server -file server.cer -keystore server_keystore.jks

该命令将服务端证书导出为一个X.509证书文件server.cer。

至此,服务端证书创建完毕,以相同流程,创建客户端证书

3. 生成客户端Keystore,包含客户端私钥和自签名证书。

keytool -genkey -alias client -keyalg RSA -keysize 2048 -validity 365 -keystore client_keystore.jks

在运行此命令时,您需要设置客户端私钥的密码以及一些与证书相关的信息,例如组织名称、所在城市等。

4. 导出客户端证书,生成证书文件。

keytool -export -alias client -file client.cer -keystore client_keystore.jks

该命令将客户端证书导出为一个X.509证书文件client.cer。

下面是重点内容!!!

5. 生成服务端Truststore,并将客户端证书导入Truststore。

keytool -import -alias client -file client.cer -keystore server_truststore.jks

此命令将客户端证书生成服务端使用的truststore文件,此处名字为server_truststore.jks
实际上是将客户端证保存到truststore文件

6. 生成客户端Truststore,并将服务端证书导入Truststore。

keytool -import -alias server -file server.cer -keystore client_truststore.jks

此命令将服务端证书导入到一个名为client_truststore.jks的Truststore文件中。

7. 因为我们用java代码编写客户端和服务端,最终只需要使用这四个文件即可

  • server_keystore.jks ==> 包含服务端的证书、服务端公钥、服务端私钥
  • server_truststore.jks ==> 包含客户端的证书以及客户端公钥
  • client_keystore.jks ==> 包含客户端的证书、客户端公钥、客户端私钥
  • client_truststore.jks ==> 包含服务端的证书以及客户端公钥
    具体使用可参考TwoWay代码

三、单向认证 自签证书生成

由于是单向认证,有两种方式

1. 只需要将服务端的证书发给客户端使用即可

这里继续使用keytool命令生成自签名的Keystore,可以按照以下步骤进行:

keytool -genkey -alias myapp -keyalg RSA -keysize 2048 -validity 365 -keystore mykeystore.jks

具体使用可参考OneWay代码

2. 客户端预埋CA证书即可,不需要使用服务端的mykeystore.jks

这样有一种好处,对于终端设备来说,可以内置一个CA证书进行验证,这个CA证书有效期可以长一点,比如说10年,20年
而服务端证书可以短一些,比如1年,3年。因为终端设备升级需要进行OTA,比较麻烦。
这里采用openssl方式进行说明,更容易理解,当然keytool也可以实现

创建一对证书,用于签名服务器,10年

openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

生成服务器私钥和 CSR

openssl genrsa -out server.key 2048
openssl req -new -sha256 -key server.key -out server.csr 

对使用CA证书和CA私钥 对 服务器CSR进行签名,时间为1天

openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 1

使用keytool工具将server.crt添加到Truststore中,并且给tls服务端使用

# 这条命令不对,因为server.crt只包含证书,而且server.jks这里面需要包含私钥
keytool -import -alias myserver -file server.crt -keystore server.jks
# 这条命令是对的,KeyStore中必须要包含私钥,TrustStore中不能包含,否则私钥就泄露
# p12也是证书的一种
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12
keytool -importkeystore -srckeystore server.p12 -srcstoretype pkcs12 -destkeystore server.jks -deststoretype jks

使用keytool工具将ca.crt添加到Truststore中,并且给tls客户端使用

# 这条命令是对的,因为是客户端使用,客户端验证服务端是否可信,只需要证书即可,不需要私钥
# 如果客户端不埋入CA证书,则会直接报错无法建立连接
keytool -import -alias myca -file ca.crt -keystore ca.jks

上面创建服务端证书,有效期是1天,1天后就会过期。过期后不在验证通过

具体代码仓库:https://github.com/worker24h/ssl-demo

相关文章:

TLS/SSL证书彻底扫盲

证书格式 pem Privacy Enhanced Mail文本格式,以 -----BEGIN CERTIFICATE----- 开头,以-----END CERTIFICATE-----结尾 der 二进制格式,只保存证书,不保存私钥java和window服务器常见 pfx/p12 Predecessor of PKCS#12二进制格式&…...

WGCNA | 值得你深入学习的生信分析方法!~(网状分析-第五步-高级可视化)

1写在前面 前面我们用WGCNA分析完成了一系列的分析,聚类分割模块。🥰 随后进一步筛选,找到与我们感兴趣的表型或者临床特征相关的模块,而且进行了模块内部分析。😘 再然后是对感兴趣模块进行功能注释,了解模…...

try catch finally执行顺序

try catch finally,try里有return,finally还执行么?答案: 执行,并且返回return时,finally的执行早于try。try-catch-finally的执行顺序无return当try中的t()没有抛出异常public static void main(String[] …...

2023年数学建模美赛D题(Prioritizing the UN Sustainability Goals)分析与编程

2023年数学建模美赛D题分析建模与编程 重要说明: 本文介绍2023年美赛题目,并进行简单分析;本文首先对 D题进行深入分析,其它题目分析详见专题讨论;本文及专题分析将在 2月17日每3小时更新一次,完全免费&am…...

35岁测试工程师被辞退,给你们一个忠告

一:前言:人生的十字路口静坐反思 入软件测试这一行至今已经10年多,承蒙领导们的照顾与重用,同事的支持与信任,我的职业发展算是相对较好,从入行到各类测试技术岗位,再到测试总监,再转…...

华为OD机试题 - 租车骑绿岛(JavaScript)

最近更新的博客 2023新华为OD机试题 - 斗地主(JavaScript)2023新华为OD机试题 - 箱子之形摆放(JavaScript)2023新华为OD机试题 - 考古学家(JavaScript)2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)2023新华为OD机试题 - 最多等和不相交连续子序列(JavaScri…...

Linux下Python脚本的编写解析fio(minimal格式)(三)

在服务器测试(storage)过程中,会看到很多人写跑fio的脚本用minimal格式来解析,因为这种格式返回的结果对与脚本(shell,python)解析log非常方便.下面介绍一下这种方式下,用Python来解析log 1 一般客户会要求结果中出现一下参数的值: bandwidth…...

【实战场景二】如何设计一个分布式锁?

如何优雅的设计一个分布式锁?如何设计一个分布式锁?1、什么是分布式锁2、那么分布式锁,具备什么条件呢?3、设计分布式锁有哪些方式?3.1 利用redis实现分布式锁原理3.2 基于数据库做分布式锁3.3 基于zookeeper实现分布式…...

Java中ThreadLocal类详解

ThreadLocal从名字上我们看出,它叫做本地线程变量,每个线程都有各自的的变量,而不再是我们之前的两个线程共用同一个变量;以这个类创建的变量,在多个线程都用到这个变量时,可以为每一个线程创建一个变量副本…...

从一致性角度考虑推荐冷启动长尾推荐问题(一)

前言:目前中长尾推荐的方法有很多,主流的方法有几类比如:1)在没有项目ID嵌入的情况下提高推荐模型的鲁棒性,2)利用有限的交互数据提高学习效率,如使用元学习方法;3)利用物品侧面信息,便于物品ID嵌入的初始化&#xff0…...

电脑(Windows)常用快捷键

简述:实用的键盘快捷键是一个程序员的必备技能,下面给大家整理了一下常用的键盘快捷键; ⭐CtrlP 打开“打印机”对话框; ⭐CtrlW 关闭当前网页; ⭐CtrlF 查找(网页内查找); ⭐…...

Java类加载器

1 类加载器 1.1 类加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化。如果不出现意外情况,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为…...

信号完整性设计规则之单根信号失真最小化

本文内容从《信号完整性与电源完整性分析》整理而来,加入了自己的理解,如有错误,欢迎批评指正。 1. 通常采用所能容许的最长上升边。 上升边越短,带宽越大,信号完整性问题越严重。 2. 使用可控阻抗走线。 可控阻抗…...

Python3 数据结构

列表 Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。 以下是 Python 中列表的方法: 方法 描述 list.append(x) 把一个元素添加到列表的结尾&#xf…...

Compose-Navigation带参传递

带参传递 目前 compose 还不支持传入对象作为参数! 简单双参数 根目录下新建文件夹 entity,新建单例类 ContentType 作为数据类存储位置 新增数据类 DemoContent,这表示我们需要传入的两个参数,后面带问号判空 object ContentT…...

【函数栈帧的创建和销毁】 -- 神仙级别底层原理,你学会了吗?

文章目录1.函数的调用方式 2.函数在栈区上的动作 1.函数的调用方式 相信你对调用函数一点都不陌生,但是在调用函数的过程中,却存在着很多你无法见到的东西,这是底层信息,想要理解透彻,就得深入底层去观察。 本文以…...

Promise的使用及原理

此文章主要讲解核心思想和基本用法,想要了解更多细节全面的使用方式,请阅读官方API 这篇文章假定你具备最基本的异步编程知识,例如知道什么是回调,知道什么是链式调用,同时具备最基本的单词量,例如page、us…...

怎么拥有一个帅气的 CMD 命令窗口 ❓ - Windows

自从拥有这样一个炫酷的命令窗口,我都舍不得关掉它了 关于我为什么我要闲的去 “打扮” 一个命令窗口,这要从星期五下午的一场 摸鱼 🐠 开始,当时我要创建一个 vue ts vite 的项目练练手,为新项目开始做准备&#x…...

时隔多年再学习Vuex,什么?原来如此简单!

时隔多年再学习Vuex,什么?原来如此简单! start 写 Vue 写了好多年了,少不了和 Vuex 打交道。虽然使用它的次数非常频繁,但是潜意识里总觉得这东西很难,导致遇到与之相关的问题就容易慌张。时至今日,升级版…...

Linux笔记_gcc

Linux_gcc程序的翻译链接库make与makefile关于gcc的一些笔记。 程序的翻译 gcc/g是一个编译器。 预处理:头文件展开、条件编译、宏替换、去注释 编译:C语言汇编语言 汇编:汇编->可重定位目标二进制文件,不可以被执行&#xff0…...

2023美赛MCM A题 详细思路

2023美赛(MCM/ICM)如期开赛,为了尽早的帮大家确定选题。这里我们加急为大家编辑出A赛题详细思路,方便大家快速对A题目的难度有个大致的了解。同时,我们也给出了A题目简要的解题思路,以及该问题在实际解决中可能会遇到的难点。A题的…...

c#: NetTopologySuite凹凸多边形计算

环境: .net 6.0NetTopologySuite 2.5.0vs2022平面二维 一、夹角计算 1.1 计算向量与x轴正方向的夹角 方法: AngleUtility.Angle(Coordinate p) 下图上的t2即为p,之所以这么写是为了和AngleUtility.AngleBetweenOriented做比较 注意: 结果…...

NFT Insider #86:A16z 领投,YGG 获得 1380 万美元融资,The Sandbox与《北斗神拳》合作

引言:NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据,艺术新闻类,游戏新闻类,虚拟世界类&#…...

Sort_Algorithm

排序算法前言插入排序折半插入排序希尔排序冒泡排序快速排序选择排序堆排序归并排序前言 排序算法:将一堆数据元素按关键字递增或者递减的顺序,进行排序。 排序算法的评价指标:时间复杂度,空间复杂度,算法稳定性。 算…...

【初探人工智能】2、雏形开始长成

【初探人工智能】2、雏形开始长成【初探人工智能】2、雏形开始长成安装Flask封装Web接口雏形设置接收参数功能验证聊天写代码代码补全生成图片写在后面笔者初次接触人工智能领域,文章中错误的地方还望各位大佬指正! 【初探人工智能】2、雏形开始长成 在…...

【LeetCode】剑指 Offer(2)

目录 写在前面: 题目: 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 写在前面: 今天的每日一题好难,我不会dp啊啊啊啊啊啊。 所以&am…...

【JavaSE】Lambda、Stream(659~686)

659.每天一考 1.写出获取Class实例的三种常见方式 Class clazz1 String.class; Class clazz2 person.getClass(); //sout(person); //xxx.yyy.zzz.Person... Class clazz3 Class.forName(String classPath);//体现反射的动态性2.谈谈你对Class类的理解 Class实例对应着加载…...

有限差法(Finite Difference)求梯度和Hessian Matrix(海森矩阵)的python实现

数学参考 有限差方法求导,Finite Difference Approximations of Derivatives,是数值计算中常用的求导方法。数学上也比较简单易用。本文主要针对的是向量值函数,也就是f(x):Rn→Rf(x):\mathbb{R^n}\rightarrow \mathbb{R}f(x):Rn→R当然&…...

day33 贪心算法 | 1005、K次取反后最大化的数组和 134、加油站 135、分发糖果

题目 1005、K次取反后最大化的数组和 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。) 以这种方式修改…...

《蓝桥杯每日一题》递推·AcWing 3777. 砖块

1.题目描述n 个砖块排成一排,从左到右编号依次为 1∼n。每个砖块要么是黑色的,要么是白色的。现在你可以进行以下操作若干次(可以是 0 次):选择两个相邻的砖块,反转它们的颜色。(黑变白&#xf…...

交流做病理切片的网站/百度普通版下载

我想在gdb中使用python脚本,但是我有一些问题,如何让这些命令结果重定向到我的python脚本?我的意思是,当我在gdb中使用“ info f”时,它将打印有关ebp的信息,即eip信息…现在,我想让这些信息不在屏幕上显示,而是重定向到变量.例如,在我的python脚本中,有一个名为“ …...

网页设计与网站建设奥鹏考试答案/站长收录平台

为什么80%的码农都做不了架构师?>>> 各位ccflow 爱好者: 最近推出一些ccflow5的视频教程,如下: http://video.sina.com.cn/v/b/102317000-1618288504.html 驰骋工作流引擎-同表单分合流设计过程 http://video.sina.com.cn/v/b/102314852-…...

网站名百度搜不到/网络营销推广的要点

领取成功您已领取成功!您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦!-|回复不要太快哦~回复内容不能为空哦回复已提交审核...快登录帐号来一起讨论吧&a…...

网站建设免费域名/北京seo经理

如果遇到死锁了,怎么解决呢?找到原始的锁ID,然后KILL掉一直持有的那个线程就可以了, 但是众多线程,可怎么找到引起死锁的线程ID呢? MySQL 发展到现在,已经非常强大了,这个问题很好解…...

沈阳市建设工程安全监督站网站/怎么创建网站赚钱

感兴趣python 字符串函数大全的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧。生成字符串变量strpython String function字符串长度获取:len(str)例:print %s length%d % (str,len(str))连接字符串sStr1 strcatsStr2 appendsStr1 s…...

做网站协调/友情链接

HTML与CSS二三事概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器 ...Tomcat 的三种(bio,nio.apr) 高级 Connec…...