一、算法、密钥(对)、证书、证书库

令狐冲是个马场老板,这天,他接到店里伙计电话,说有人已经签了租马合同,准备到马场提马,,他二话不说,突突突就去了,到了之后,发现不认识租客。

令狐冲说,你把你租马合同给我看看,这就是证书。

没成想这租客是个二道贩子,他呼啦一下掏出来一个装满租马合同的文件袋,这就是证书库。

租客拿出来跟店里直签的合同,有双方的印章,这就是自签名证书。

令狐冲瞟了一眼,看到还有一些文件头写着什么 “大明战马管理公司xxx” 的租马合同,大家都信任朝廷牵头做的合同,这就是CA证书。

令狐冲看了租客的租马合同,发现上面确实是店里的印章,这就是公钥。

令狐冲掏出来一个钥匙串,挑选了一把造型奇特的钥匙,打开了大门,这就是私钥。

这些钥匙还有的是十字形的,有的是扁的,有的打凹点,有的划凹槽,有不同的型号,这就是算法。

钥匙和印章,这就是密钥对。

令狐冲提了匹乌骓给租客,这二道贩子骑上就走,大喊一句:俺老孙去也。

二、编码与证书格式

学习Java加解密的同学,常常被各种文件及其格式给弄的晕头转向,这里帮同学们做一下划分,帮助同学们理解

2.1 编码格式的基石 - ASN.1语法

ASN.1 只是一种语法,它只定义 编码怎么写 ,不定义 编码具体内容

下面是 ASN.1 的语法

类型名 ::= 基础类型 { 类型具体描述 }

它只有这么个东西,这只是个语法,下面是一个语法示例

Blog ::= SEQUENCE {
address PrintableString,
title UTF8String,
date UTCTime,
content String,
status BlogStatus
}

2.2 编码格式

编码格式的制定,遵循上述章节的语法,但是有自己的属性、属性占据长度等的定义。

比如,定义的基础类型有哪些(上章节中示例的基础类型为 SEQUENCE)。

比如,编码的前几个字节,分别代表什么意思。

这里不再展开,有兴趣的同学可以参阅各种编码格式的说明,我们只需要了解编码格式的概念就好了。

常见有如下编码格式

  • BER 基本编码格式
  • CER 规范编码格式 ber 的变种,变长,在实际应用中比较少
  • DER 卓越编码格式 ber 的变种,定长,数字签名的默认编码
  • PER 压缩编码格式
  • XER XML编码格式

通常的,我们说的证书内容的编码格式,是指 DER 编码格式,下文中均指 DER 编码格式。

2.3 编码标准

有了格式之后,并不能直接用来定义证书内容,就比如我们有了长城砖,但是并不知道长城该怎么垒

而编码标准,就是告诉我们,通过已知的编码格式(长城砖),怎么去垒长城。

2.3.1 x509 编码标准

x509 是密码学中,关于 公钥证书格式 的一个编码标准,用于证书。

我们说的数字证书,通常意义上是指 x509 公钥证书,它含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构 CA 的签名,也可以是自签名)

2.3.2 PKCS 编码标准

严格来讲,PKCS 是一个公钥密码学 标准组,它有一系列的编码标准,拓展了诸如加解密、签名、密钥交换、分发证书等过程中的一些规范。

PKCS已经发布了15个版本的标准,常用的版本对应的用途说明如下:

公钥加密标准 说明 文件后缀
PKCS1 RSA 加密规范,提供了基于 RSA 算法的公钥加密实现的建议
PKCS 7 密码消息语法标准 .p7b .p7c .spc
PKCS 8 存储私钥信息的标准语法 .key
PKCS 10 证书请求语法标准 .p10 .csr
PKCS 12 个人信息交换语法标准 .p12 .pfx

其中,.p12 / .pfx 常用来做证书库文件

2.4 证书文件格式

DER 编码格式的证书是二进制文件,它不能在文本环境下交换信息,为了解决这个问题,出现了用 PEM 格式编码的证书

2.4.1 PEM 文本编码格式

简单来说,PEM 实际上就是把 DER 二进制内容用 Base64 编码一下,然后加上-----BEGIN label----- 形式的头部和 -----END label----- 形式的尾部

下面是一个 PEM 编码格式的公钥

-----BEGIN PUBLIC KEY-----
BASE64 ENCODER STRING ...
-----END PUBLIC KEY-----

密钥、证书都可以转为 PEM 格式,以方便在文本环境中传输

2.4.2 常见证书文件

通常的,有如下常见证书文件

扩展名 说明
.der 二进制证书文件,不常用
.pem 证书或密钥的文本存储格式文件
.csr 证书签名请求文件
.key 单独存放的 PEM 编码格式私钥文件
.cer window 环境下常见证书库文件,可以是二进制,也可以是 PEM 编码格式
.crt linux 环境下常见证书库文件,可以是二进制,也可以是 PEM 编码格式

2.5 常见证书库的文件编码格式

常用的证书生成工具有 jdk 自带的 keytool 、linux 体系的 openssl,对应的,他们生成的证书库文件编码格式如下:

  • JKS - keytool 生成的证书库的文件编码格式,文件有 *.jks , *.keystore
  • PEM - openssl 生成的证书库的文件编码格式,文件有 *.pfx, *.p12

三、算法列举

在报文传输过程中,一定会有使用密钥对进行加密/解密、签名/验签、报文摘要等操作,这些都需要有针对性的算法

算法 分类 说明
AES 加解密 对称加密算法
DES 加解密 对称加密算法
RSA 加解密/签名 非对称加密算法
MD 摘要 常见MD5
SHA 摘要 安全散列算法
Mac 摘要 消息认证码算法
DSA 签名 数字签名算法,虽属于非对称加密,但不能加解密
MD5withRSA 签名
SHA1withRSA 签名
SHA256withRSA 签名
SHA1withDSA 签名
SHA256withDSA 签名
SHA512withDSA 签名

[java与https]第一篇、证书杂谈的更多相关文章

  1. java调用https接口导入证书认证

    1.获取证书 浏览器访问需要调用的接口路径 如图导出证书. 2.进入java目录 jre/lib/security 导入证书 keytool -import -alias name -keystore ...

  2. 从零开始搭建Java开发环境第一篇:Java工程师必备软件大合集

    1.JDK https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 目前主流的JDK版 ...

  3. Java面试系列第一篇-基本类型与引用类型

    这篇文章总结一下我认为面试中最应该掌握的关于基本类型和引用类型的面试题目. 面试题目1:值传递与引用传递 对于没有接触过C++这类有引用传递的Java程序员来说,很容易误将引用类型的参数传递理解为引用 ...

  4. Java调用HTTPS接口的证书配置

    首先需要获取到证书文件. 然后,将证书导入到本地: keytool -import -noprompt -trustcacerts -alias <AliasName> -file < ...

  5. java连接https时禁用证书验证.

    import java.io.File; import java.security.cert.CertificateException; import java.util.List; import j ...

  6. Java队列学习第一篇之列介绍

    Java并发之显式锁和隐式锁的区别 在面试的过程中有可能会问到:在Java并发编程中,锁有两种实现:使用隐式锁和使用显示锁分别是什么?两者的区别是什么?所谓的显式锁和隐式锁的区别也就是说说Synchr ...

  7. java的https请求解决证书问题

    package sqr.srchSpider.utils; import java.security.SecureRandom; import java.security.cert.Certifica ...

  8. Java线程入门第一篇

    Java线程的状态有6种 1.  初始(NEW):新创建了一个线程对象,但还没有调用start()方法. 2.  运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running) ...

  9. java 线程池第一篇 之 ThreadPoolExcutor

    一:什么是线程池? java 线程池是将大量的线程集中管理的类,包括对线程的创建,资源的管理,线程生命周期的管理.当系统中存在大量的异步任务的时候就考虑使用java线程池管理所有的线程.减少系统资源的 ...

  10. java学习(第一篇)

    Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式 ...

随机推荐

  1. ingsollrang英格索兰IC直流电动拧紧控制器维修

    随着智能装配的概念逐渐在行业内推广,质量管理已成为实现智能装配过程中的一个重要环节,许多客户都有着数据记录.扭矩检测的需求,英格索兰的多种拧紧工具配合控制器,可以满足从基本拧紧到质量管理的一系列需求, ...

  2. C语言中的*和&符号

    之前对*和&符号一直理解的比较浅显.只知道: *p好像表示的是一个指针: &p表示的是一个地址. 然而这次当遇到了下面这个情况的时候: int a = 10; int *b = &am ...

  3. 移动硬盘插入win10检测到却不显示盘符解决方法

    1.开始菜单中的设置-----设备. 2.选择"蓝牙和其他设备" 3.在其他设备栏中就能看到检测到的移动硬盘,点击删除设备后重新插入移动硬盘即可在此电脑上显示盘符.

  4. Java中ArrayList的常见用法

    Java 中的 ArrayList 是一个非常常用的动态数组,它属于 Java 集合框架的一部分.与普通数组不同,ArrayList 可以在需要时动态调整其大小.以下是 ArrayList 的一些详细 ...

  5. 【由技及道】镜像圣殿建造指南:Harbor私有仓库的量子封装艺术【人工智障AI2077的开发日志009】

    摘要:当容器镜像需要同时存在于8个平行宇宙时,就像在量子计算机里管理72个维度的镜像分身.本文记录一个未来AI如何通过Harbor搭建量子镜像圣殿,让容器分发成为跨越时空的瞬间传送. 动机:镜像管理的 ...

  6. 使用 Trae 辅助开发一个网页文本高亮插件

    项目概述 本插件是一个用于在网页上高亮显示选中文本的工具,支持多种颜色选择.高亮复制和删除等功能.插件基于 Edge 扩展测试开发. 目前只大致开发了内容交互脚本和插件弹出页,后台管理页暂未开发. 项 ...

  7. 【P6】Verilog搭建流水线MIPS-C3-CPU(50条指令)

    我开P6是过P5了吗?笑死,P5又挂了,还是经典的blezalc指令,天知道原来我是不会写的,前近一个月每次branch类指令全都加错,而且是错得离谱.但都把重心放在课下debug上了,自以为不就是b ...

  8. GitFlow ⼯作流

    前言 Git 是一个开源分布式版本控制系统,它可以很方便的帮我们记录文件的改动,就像下面一样: 我们可以很快的跳到文件改动的某一个版本(就像时空穿梭一样). Git 在程序开发中,作为一个源码管理系统 ...

  9. go grpc的入门使用

    简介 什么是grpc grpc是一个由google推出的.高性能.开源.通用的rpc框架.它是基于HTTP2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言. ...

  10. laradock 安装扩展程序 pcntl

    起因 运行workman脚步的时候,PHP 提示缺少 pcntl 扩展 Config git:(master) php start.php -d Please install pcntl extens ...