[java与https]第一篇、证书杂谈
一、算法、密钥(对)、证书、证书库
令狐冲是个马场老板,这天,他接到店里伙计电话,说有人已经签了租马合同,准备到马场提马,,他二话不说,突突突就去了,到了之后,发现不认识租客。
令狐冲说,你把你租马合同给我看看,这就是证书。
没成想这租客是个二道贩子,他呼啦一下掏出来一个装满租马合同的文件袋,这就是证书库。
租客拿出来跟店里直签的合同,有双方的印章,这就是自签名证书。
令狐冲瞟了一眼,看到还有一些文件头写着什么 “大明战马管理公司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]第一篇、证书杂谈的更多相关文章
- java调用https接口导入证书认证
1.获取证书 浏览器访问需要调用的接口路径 如图导出证书. 2.进入java目录 jre/lib/security 导入证书 keytool -import -alias name -keystore ...
- 从零开始搭建Java开发环境第一篇:Java工程师必备软件大合集
1.JDK https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 目前主流的JDK版 ...
- Java面试系列第一篇-基本类型与引用类型
这篇文章总结一下我认为面试中最应该掌握的关于基本类型和引用类型的面试题目. 面试题目1:值传递与引用传递 对于没有接触过C++这类有引用传递的Java程序员来说,很容易误将引用类型的参数传递理解为引用 ...
- Java调用HTTPS接口的证书配置
首先需要获取到证书文件. 然后,将证书导入到本地: keytool -import -noprompt -trustcacerts -alias <AliasName> -file < ...
- java连接https时禁用证书验证.
import java.io.File; import java.security.cert.CertificateException; import java.util.List; import j ...
- Java队列学习第一篇之列介绍
Java并发之显式锁和隐式锁的区别 在面试的过程中有可能会问到:在Java并发编程中,锁有两种实现:使用隐式锁和使用显示锁分别是什么?两者的区别是什么?所谓的显式锁和隐式锁的区别也就是说说Synchr ...
- java的https请求解决证书问题
package sqr.srchSpider.utils; import java.security.SecureRandom; import java.security.cert.Certifica ...
- Java线程入门第一篇
Java线程的状态有6种 1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法. 2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running) ...
- java 线程池第一篇 之 ThreadPoolExcutor
一:什么是线程池? java 线程池是将大量的线程集中管理的类,包括对线程的创建,资源的管理,线程生命周期的管理.当系统中存在大量的异步任务的时候就考虑使用java线程池管理所有的线程.减少系统资源的 ...
- java学习(第一篇)
Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式 ...
随机推荐
- 旅行商问题(TSP)概述
旅行商问题(TSP)概述 1. TSP问题的复杂性 定义:旅行商问题(Traveling Salesman Problem, TSP)是给定一系列城市及其之间的距离,要求找到一条最短路径,使得旅行商从 ...
- 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
关注公众号回复1 获取一线.总监.高管<管理秘籍> 书接上文:DeepSeek怎么突然就比肩GPT了? 如前所述,应用层AI开发压根不会去刻意关注大模型底层实现,多数时候也关注不了. 但我 ...
- 克鲁斯焊机GL 270引弧困难维修
克鲁斯焊机维修: 对于客户而言,其受益之处在于所有的机械手系统部件,从机械手控制.工件.定位器.传感器到电源和焊枪,都是由一家供应商开发和制造的.而诸如熔化极惰性气体/活性气体保护双丝焊接技术.等离子 ...
- DW004 - ArgoDB介绍
ArgoDB:自主可控.国际领先.一站式满足湖仓集一体化建设的创新型分布式分析数据库 一.产品特点 统一的SQL编译引擎:支持标准SQL,兼容Teradata,Oracle,Db2等方言,应用开发门槛 ...
- 数据库离程序员有多远 - cnblogs救园行动感想
这两周,我参与了博客园的"2024救园行动",成了终身会员.说实话,当初报名的时候,我心里还挺兴奋的,想着这下能和不少老朋友在这个社区里再次相聚.毕竟,在数据库行业摸爬滚打了这么多 ...
- C# 之事件及event关键字存在的意义
总结:event关键字的作用,用于不公开发布器中委托对象实例,对事件委托对象进行保护,禁止外部调用. 1.C#事件举例说明 1 //事件及event关键字存在的意义 2 class Program 3 ...
- 震惊!AI编程正在淘汰这5类人,你在其中吗?
大家好,我是狂师. 今天在知乎上看到一个关于讨论:"人工智能大爆发,AI编程工具对程序员到底是颠覆还是辅助?'"问题,觉得蛮有意思.的确,AI编程的出现,引发了人们对于程序员职业未 ...
- SpringBoot整合Dubbox(无XML配置)
简介 Dubbox是当当网对阿里的Dubbo进行增强的一个分支.在使用springboot之后,我们发现很多配置并不一定要使用xml.这篇文章的目的是让你使用Dubbox时能像使用springboot ...
- Mysql 8.0 创建用户、授权用户、更改密码、撤销用户权限、删除用户
一. 创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username: 你将创建的用户名 host: 指定该用户在哪 ...
- Laravel MongoDB
Laravel MongoDB This package adds functionalities to the Eloquent model and Query builder for MongoD ...