| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 公钥、私钥、数字签名和数字证书的概念及解密 -> 正文阅读 |
|
[网络协议]公钥、私钥、数字签名和数字证书的概念及解密 |
http协议的数据传递是明文的, 也就是从服务器传递给浏览器的内容是明文的, 这个信息如果被截取了,内容也就完全暴露了。所以大部分的互联网网站和应用使用的基本都是https协议,在申请和配置网站的https协议时,经常会听到的几个概念有:
概念解析
对于加密这个词,最直观的想法就是设置一个密码,使用这个密码对一段内容进行加密得到密文, 然后又使用同样的密码解密密文得到原文, 这就是对称加密。这个用来加密和解密的密码就是密钥。 在对称加密中,如果密码泄露了,则双方的通讯也就不安全了。所以就有了非对称加密,非对称加密是一次产生一对密钥, 也称为密钥对,也就是一个公钥和一个私钥,这两个密钥 ,一个用来加密,一个用来解密。 通讯的双方分别把公钥给对方,留存私钥。发送信息给对方是,使用对方的公钥对信息加密,对方使用自己的私钥解密, 如下图所示: 公钥对外是公开的,即使加密的信息被截获了, 没有私钥也是无法解密内容。 这样看起来传递的信息是安全的。 可是如果黑客转换一下思维呢? 不关注获取的信息,而是传递一个假的信息。 因为公钥是公开的,黑客可以获取某一方的公钥,如果黑客替换了接收者的公钥,则其就可以用自己的私钥发送签名的内容给接收者。接收者使用错误的公钥验证黑客发送的内容却是可以通过校验的,这样接收者就接收了错误的内容。 如下图: 这里的关键问题就是: 如何确保某个公钥是可信的,如果说甲怎么知道乙的公钥的确是乙的呢?而不是某人伪造的呢? 在现实生活中的例子就是如何确保某个人拿的身份证是真的呢? 生活中最简单的就是到派出所查询一下就可以了, 对于公钥的认证也有一个专门认证的CA机构(Certificate Authority)。CA机构本身也有一对公私钥,CA用自己的私钥,对需要认证的公钥及相关的信息进行加密,生成**“数字证书”**,而CA的公钥就是默认放在操作系统或浏览器中。 https 的非对称加密和对称加密任何事物都是由两面的,非对称加密安全,但是效率不好, 最慢甚至能达到1000倍;对称加密安全性不高,但是速度比较快。
如何产生密钥和证书Java自带了keytool 用来进行密钥和证书的管理。 使用keytool 产生公私钥到一个密钥库文件中。Java密钥库文件的后缀名一般是 .keystore , 产生一对公私钥使用 genkeypair ,完整的命令示例如下:
或者更简单:
后面根据提示进行输入。 这里出于演示,依据以JKS标准的文件进行演示, 产生后的my.keystore是一个二进制文件, 使用文本编辑器打开后的效果如下: 从密钥库文件导出证书数字证书一般由CA机构颁发,也可以产生自签名的证书。
以Tomcat服务器为例, 配置上面产生的密钥库文件my.keystore之后,在浏览器端就可以导出证书和信任这个证书, 详细的步骤可以参考以下一篇: 除了在浏览器导出证书之外, keytool 也提供了直接从密钥库文件导出证书的命令
使用上面命令导出的证书my.cer,在Windows 下可以直接双击打开。打开后的效果如下: 看一看,证书包含哪些内容呢?
openssl 将二进制的证书文件转换为文本显示openssl 是SSL相关的命令行工具。Linux 默认包含整个工具。 Windows 下没有,但是可以另外安装。 安装完成后,搜索openssl后打开。 切换到证书目录, 执行如下命令:
证书的文本显示的效果如下: 从证书可以查看到公钥和私钥的数字签名, 那么如何获取私钥呢, 在Java中,可以通过API进行获取。 参考 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:28:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |