Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}

//单纯使用公私钥进行加解密,会存在公钥被替换伪造的风险,无法判断公钥是否属于服务提供商。

//所以,公钥需要通过CA机构的认证。

//CA机构用自己的私钥,对服务提供商的相关信息及公钥进行加密生成数字证书。

//在进行安全连接的时候,服务提供商将证书一同发给用户。

//用户收到证书后,从他的CA认证机构下载证书/公钥,验证服务提供商证书的合法性。

//最后,从证书中提取服务商提供的公钥,加、解密信息进行通信。

名词解释:

CA: Certificate Authority,证书中心/证书授权中心/电子认证服务机构,负责管理和签发证书的,受公众信任足够权威的第三方机构,检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改。

CA证书: CA颁发的证书, 或数字证书,包含证书拥有者的身份信息,CA机构签名,公钥等。

证书编码:

DER编码,二进制DER编码。

PEM编码,用于ASCII(BASE64)编码,文件由 "-----BEGIN"开始,"-----END"结束。

证书文件后缀:

.pem(openssl默认,PEM编码的文件) .crt(Unix/Linux,DER或PEM编码都可以) .cer(windows,二进制)  .der(二进制)

秘钥文件:

.key

服务器证书申请文件/证书签名请求文件:

.req  .csr

使用openssl模拟秘钥证书的生成过程:

openssl x509工具主要用于输出证书信息, 签署证书请求文件、自签署、转换证书格式等。它就像是一个完整的小型的CA工具箱。

1.生成服务器私钥:

1.1.需要经常输入密码:

openssl genrsa -des3 -out server_private.key 2048 会有输入密码的要求

1.2.去除密码:

openssl rsa -in server_private.key -out server_private.key

1.3.无密码证书秘钥:

openssl genrsa -out server_private.key 2048

//1.4.生成公钥:

//openssl rsa -in server_private.key -pubout -out server_public.key

.生成 服务器证书申请文件/证书签名请求文件 .req:

2.1.openssl req -new -key server_private.key -out server.req

会让输入Country Name 填 CN; Common Name 填 ip 也可以不填。

#查看server.req

2.2.openssl req -in server.req -text

.生成CA私钥:

3.1.openssl genrsa -out ca_private.key 2048

.生成 CA证书申请文件/证书签名请求文件 .req:

4.1.openssl req -new -key ca_private.key  -out ca_request.req

#查看ca_request.req

4.2.openssl req -in ca_request.req -text

.创建CA证书,用来给服务器的证书签名:(这个证书请求本来应由更高级的CA用它的private key对这个证书请求进行签发,由于此时模拟的CA是 root CA,没有更高级的CA了,所以要进行自签发,用 自己的private key 对 自己的证书请求 进行签发。)

5.1.openssl x509 -req -in ca_request.req -signkey ca_private.key -days 365 -out ca.pem

#查看证书

5.2.openssl x509 -in ca.pem -noout -text

.CA用自己的CA证书ca.pem 和 私钥ca_private.key 为 server.req 文件签名,生成服务器证书,:

6.1.openssl x509 -req -in server.req -CA ca.pem -CAkey ca_private.key -days 365 -CAcreateserial -out server.pem

#查看证书

6.2.openssl x509 -in server.pem -noout -text

#查看公钥

6.3.openssl x509 -in server.pem -noout -pubkey

.查看服务器证书的modulus和服务器私钥的modulus,应该一样:

7.1.openssl x509 -in server.pem -noout -modulus

7.2.openssl rsa -in server_private.key -noout -modulus

.用户访问https网站,服务器会用private key加密数据传输,同时会把证书传给用户,里面有public key信息,用于解密数据。

用户使用公钥机密的时候,要确认此公钥是否是服务商的,是否是受信任的。

用户从服务商证书中发现,其证书是由某CA签发的,从CA官网下载他的证书,发现它由 更高级CA签发 或者 是root证书,自签发的。

这时就可以一级一级的验证证书的合法性,最终确认服务商的证书是否被信任。

验证后就可以使用公钥解密信息,进行通信。

openssl verify -CAfile ca.pem server.pem

. ls 出现以下文件:

ca.pem  ca_private.key  ca_request.req  ca.srl  server.pem  server_private.key  server.req

.从证书导出公钥:

openssl x509 -in server.pem -noout -pubkey -out server_public.key

.使用公钥加密,私钥解密:

openssl rsautl -encrypt -in test.txt -inkey server_public.key -pubin -out test_encrypt.txt

openssl rsautl -decrypt -in test_encrypt.txt -inkey server_private.key -out test_decrypt.txt

.不想浏览器发出警告,就导入ca.pem文件:

.查看证书内容:

13.1.打印出证书的内容:openssl x509 -in server.pem -noout -text

13.2.打印出证书的系列号:openssl x509 -in server.pem -noout -serial

13.3.打印出证书的拥有者名字:openssl x509 -in server.pem -noout -subject

13.4.以RFC2253规定的格式打印出证书的拥有者名字:openssl x509 -in server.pem -noout -subject -nameopt RFC2253

13.5.打印出证书的MD5特征参数:openssl x509 -in server.pem -noout -fingerprint

13.6.打印出证书有效期:openssl x509 -in server.pem -noout -dates

13.7.打印出证书公钥:openssl x509 -in server.pem -noout -pubkey

.证书秘钥要使用相同的编码格式

.证书格式转换:

PEM转DER格式:openssl x509 -inform pem -in server.pem -outform der -out server.der

DER转PEM格式:openssl x509 -inform der -in server.der -outform pem -out server.pem0

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}

一文读懂什么是CA证书的更多相关文章

  1. [转帖]一文读懂 HTTP/2

    一文读懂 HTTP/2 http://support.upyun.com/hc/kb/article/1048799/ 又小拍 • 发表于:2017年05月18日 15:34:45 • 更新于:201 ...

  2. 一文读懂HTTP/2及HTTP/3特性

    摘要: 学习 HTTP/2 与 HTTP/3. 前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何 ...

  3. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  4. 一文读懂高性能网络编程中的I/O模型

    1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...

  5. 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...

  6. 一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm)

    一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm) 2017-12-25  16:29:19   对于 A3C 算法感觉自己总是一知半解,现将其梳理一下,记录在此,也 ...

  7. [转帖]MerkleDAG全面解析 一文读懂什么是默克尔有向无环图

    MerkleDAG全面解析 一文读懂什么是默克尔有向无环图 2018-08-16 15:58区块链/技术 MerkleDAG作为IPFS的核心数据结构,它融合了Merkle Tree和DAG的优点,今 ...

  8. [转帖]从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路   http://www.52im.net/thread-1709-1-2.html     本文原作者阮一峰,作者博客:r ...

  9. 一文读懂HDMI和VGA接口针脚定义

    一文读懂HDMI和VGA接口针脚定义 摘自:http://www.elecfans.com/yuanqijian/jiekou/20180423666604.html   HDMI概述 HDMI是高清 ...

随机推荐

  1. 前端实现html转pdf方法总结

    最近要搞前端html转pdf的功能.折腾了两天,略有所收,踩了一些坑,所以做些记录,为后来的兄弟做些提示,也算是回馈社区.经过一番调(sou)研(suo)发现html导出pdf一般有这几种方式,各有各 ...

  2. Eureka在有虚拟网卡的情况下获取正确的IP

    发现问题 最近项目在Eureka注册时,发现一个问题:注册的IP地址不是 192.168.0.XXX 的网络IP,而是另外一个网段的地址,如图 通过 ipconfig 命令查看本机的IP地址发现,该I ...

  3. Promise,Generator,Await/Async

    上节中忘记讲:Iterator接口和Generator函数的关系了,Symbol.iterator方法的最简单的实现就是通过Generator函数: let myIterable = { [Symbo ...

  4. ajax的post提交 序列化json参数

    再一次项目中,很常见的就是我的前端需要异步进行和后端交互 ,然而需要携带一些参数过去,并且参数类型是json 怎么办呢? 这个时候我们就需要 进行参数序列化 很简单就两句话 如下图 我们看 JSON, ...

  5. 【WPF学习】第五十八章 理解逻辑树和可视化树

    在前面章节中,花费大量时间分析了窗口的内容模型——换句话说,研究了如何在其他元素中嵌套元素,进而构建完整的窗口. 例如,考虑下图中显示的一个非常简单的窗口,该窗口包含两个按钮.为创建该按钮,在窗口中嵌 ...

  6. 大型Java进阶专题(三) 软件架构设计原则(下)

    前言 ​ 今天开始我们专题的第二课了,本章节继续分享软件架构设计原则的下篇,将介绍:接口隔离原则.迪米特原则.里氏替换原则和合成复用原则.本章节参考资料书籍<Spring 5核心原理>中的 ...

  7. 安卓 打飞机 app 开发 第一篇

    先上效果图 其实,当时刚买 htc G8 的时候(那时北京的房价还是6千一平),安卓2.1 ,2.3 的时候就已经有安卓方面的开发的兴趣,但后来就没有弄过... today 突然想起来,手机上连个游戏 ...

  8. mysql实现读写分离

    MySQL读写分离概述 1.读写分离介绍 对于目前单机运行MySQL服务.会导致MySQL连接数过多.最终导致mysql的宕机.因此可以使用多台MySQL服务器一起承担压力.考虑到项目中读写比例的不一 ...

  9. javaScript 基础知识汇总(八)

    1.Map Set WeakMap 和WeakSet Map 是一个键值对的集合,主要的方法包括: new Map() 创建Map map.set(key,value)  根据键(key)存储值(va ...

  10. JavaScript 模式》读书笔记(3)— 字面量和构造函数2

    上一篇啊,我们聊了聊字面量对象和自定义构造函数.这一篇,我们继续,来聊聊new和数组字面量. 三.强制使用new的模式 要知道,构造函数,只是一个普通的函数,只不过它却是以new的方式调用.如果在调用 ...