前段时间,在做 https 的协议解密工作,所以对公开密钥算法等有了初步的了解,用本篇文章梳理下,参考《深入浅出HTTPS 从原理到实践》,学习https必备的好书,内容很详实,推荐!

一 简介

公开密钥算法其实不是一个算法,包含一组算法,包括加密和数据完整性保护算法等。只所以叫公开密钥算法是因为它有一对密钥,一个是公钥,一个是私钥。公钥可以公开。和常用的对称加密算法有所不同,对称加密算法的密钥只有一个;

此外,公开密钥算法不仅仅用于数据加密,还用于密码协商,数字签名。公开密钥算法进行加密的时候,安全性一般比较好,当时性能比较差,一般不作为主力用在数据的加解密上,比如 HTTPS 中用公开密钥算法进行密钥的协商。

二 RSA 密钥

RSA 是公开密钥算法中最常用和最重要的算法(解密也只能针对这个协议解密),它和对称密钥算法的密钥不同,RSA 算法中的公钥和私钥是由很多参数组成,不是简单的数字,一般采用文件方式提供。具体格式就不说了,总之 RSA 算法通过离散对数模型来保障算法的安全性,当然也和密钥长度有关,一个长度为 2048 的密钥算法被认为是安全的。加密安全与否,除了与密钥长度有关,还和使用方式,比如填充标准有关。公开密钥算法也有使用标准,称为 PKCS,按照目前常用的规定填充标准方式填充(RSAES-OAEP 和 RSAES-PKCS1-V1-5),通过这些标准可以保障相同的内容,同样的密钥,每次加密后的内容不同,进一步保障了加密的安全性。

三 实践

3.1 生成 RSA 密钥对

openssl genrsa -out  key.pem 2048
#输出密钥信息
openssl rsa -in mykey.pem  -text

这种方式生成后,如果不加保护,不安全,可以通过以下命令保护:

openssl genrsa -des3 -out   passkey.pem 2048

从密钥对中提取公钥和私钥。

openssl rsa -in mykey.pem  -pubout -out mypub.pem

3.2 用 RSA 加解密

如果有什么重要的文件,需要加密的,我觉得用这种非对称加密算法自己手工加密是很好的方式,只是别忘记了口令。

[root@localhost log]# echo "hello world" >a.txt
[root@localhost log]# openssl rsautl -encrypt -pubin -inkey mypub.pem -in a.txt -out ciphere.log
[root@localhost log]# openssl rsautl -decrypt -inkey mykey.pem  -in ciphere.log
hello world

3.3 自签名证书生成

我们一般开发测试 https 的时候,用的证书都是自签名证书,也就是自己生成的证书,没有正规 CA 认证,浏览器访问的时候,会有个告警,忽略即可。以 rsa 为例说明:

  1. 生成密钥对

openssl genrsa -out   mykey.pem 2048

这个和上一步一样。

  1. 生成证书签名请求文件 CSR(Certificate Signing Request) 里面除了公私钥,还包含用户名称,签发者,还有 common name(对应域名信息)等。命令如下:

[root@localhost log]# openssl req -new -key mykey.pem -out my.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:sichuan
Locality Name (eg, city) []:chengdou
....
....

输入一些信息后,生成了 csr 文件。

  1. 生成自签名证书

 openssl x509 -signkey mykey.pem -in my.csr -req -days 36500 -out cert.pem

说明:-signkey 后面指定使用的密钥对文件。-in 后面跟着我们刚才生成的 csr 文件 -days 标识有效期,上面命令为 10 年。cert.pem 为最终生成的证书。

四 证书格式转换

4.1 X509 到 P12

PCKCS#12 是另外一种常见的格式,多用在 tomcat,java 或安卓的客户端上,后缀一般是:.pkcs12,.pfx,.p12,它是将证书和密钥打包成一个文件管理。

  • 从 X509 转成 p12 格式 不同的 web 服务器,采用的证书格式有所差别,有时候我们需要转换证书格式,如下:

#x509转pkcs12
openssl pkcs12 -export -in  cert.pem  -inkey  cert.pem  -out server.p12
#pkcs12 转509格式
openssl pkcs12 -in server.p12 -out certificate.cer
#从pkcs12中提取私钥
openssl pkcs12 -in mycert.p12  -nocerts -nodes -out mycert.pem

如果刚才在生成证书的时候,设置了密码这里面要输入密码才可以生成 p12 格式的证书。

4.2 X509 到 p7b

PCKCS#7 是另外一种常见格式,文件后缀一般为.p7b 和.p7c。x509 转 PCKCS#7 命令如下:

openssl crl2pkcs7 -nocrl -certfile cert.pem   -certfile CACert.cer  -out certificate.p7b

说明:-certfile 指定服务器证书或中间服务器证书 -out 指定输出的文件 -nocrl 不加载证书对应的 CRL 文件。(包含被吊销证书的序列号文件)

五 诗词欣赏

渔家傲·秋思宋:范仲淹塞下秋来风景异。
衡阳雁去无留意。
四面边声连角起。
千嶂里。长烟落日孤城闭。
浊酒一杯家万里。
燕然未勒归无计。
羌管悠悠霜满地。
人不寐。将军白发征夫泪。

简介公开密钥算法和证书生成相关推荐

  1. RSA算法原理简介,非对称加密,公开密钥算法(易懂篇)

    RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解.我们经 ...

  2. 【SSL】ssl证书简介、ssl证书生成工具与ssl证书生成步骤

    ssl证书简介.ssl证书生成工具与ssl证书生成步骤 一.ssl证书是什么? 二.ssl证书生成工具有哪些? 2.1.工具一:CFSSL 2.2.工具二:OpenSSL 2.3.工具三:XCA 三. ...

  3. 数字证书应用综合揭秘(包括证书生成、加密、解密、签名、验签)

    引言 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件.为现实网络安全化标准如今大部分的 B2B.B2C.P2P.O2O 等商业网站含有重要企业资料个人资料的信息资信网站 ...

  4. SSL安全证书生成及概念解释

    SSL安全证书-概念解析 一.关于证书 数字证书是一种认证机制.简单点说,它代表了一种由权威机构颁发授权的安全标志. 由来 在以前,传统网站采用HTTP协议进行数据传输,所有的数据几乎都用的明文,很容 ...

  5. Window+Java环境证书生成说明,pfx证书已经生成

    Window+Java环境证书生成说明 阅读说明:给具备基本开发能力的人提供自制证书的生成步骤,证书属于敏感信息,生产证书请勿泄漏. 前置条件:Windows系统.JDK1.6以上版本.java编译工 ...

  6. ssl证书生成 详细流程

    ssl证书生成 详细流程 SSL单向认证概念 1 keystore以及服务器密钥对儿的生成 2 验证新生成的keystore文件以及证书信息 3 导出公钥证书 4 Truststore的生成以及公钥证 ...

  7. https ssl单项认证和双向认证以及证书生成

    HTTP(HyperText Transfer Protocol,超文本传输协议)被用于在Web浏览器和网站服务器之间传递信息,在TCP/IP中处于应用层.这里提一下TCP/IP的分层共分为四层:应用 ...

  8. ec java sm2证书_国密算法SM2证书制作

    前段时间将系统的RSA算法全部升级为SM2国密算法,密码机和UKey硬件设备大都同时支持RSA和SM2算法,只是应用系统的加解密签名验证需要修改,这个更改底层调用的加密动态库来,原来RSA用的对称加密 ...

  9. 使用TLS和Mosquitto Broker实现安全通信之密钥和证书生成

    目录 1 前言 2 概览 3 密钥和证书生成 3.1 创建CA密钥对(根证私钥) 3.2 创建CA证书请求(根证书请求文件) 3.3 创建Mosquitto Broker相关密钥 3.4 创建CA证书 ...

最新文章

  1. OpenCV 【十】——Gamma校正 ——图像灰度变化
  2. 华为发布会: 牛逼鸿蒙,吹水的大会
  3. ML之FE:特征工程中的特征拼接处理(常用于横向拼接自变量特征和因变量特征)(daiding)
  4. 漫画:程序员的社会地位
  5. 读写应用程序数据-NSUserDefault、对象归档(NSKeyedArchiver)、文件操作
  6. 架构设计文档规范文档
  7. Android Eclipseproject开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决的方法...
  8. HyperLedger Fabric 1.4 kafka生产环境部署(11.1)
  9. 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证....
  10. asp.net状态服务文章阅读
  11. 第K顺序统计量的求解
  12. 中兴笔试题目及答案(软件开发工程师)
  13. ubuntu下向163发送邮件
  14. SpringCloud(八) 微服务安全实战 Prometheus配置grafana可见性监控,ELK日志,pinpoint追踪(Tracing,Metrics,Logging)
  15. 使用pytorch自己从头搭建一个Lenet分类器网络及其训练、检测脚本
  16. Spring Admin 入门
  17. 南岭之南_RWERWERWE_96921_新浪博客
  18. js实现点赞、取消点赞思路(前端技术适用)
  19. 关键词生成原创文章及句子的软件!开发原理分析
  20. 中国保险中介行业市场规模调研及投资可行性研究报告2022-2027年

热门文章

  1. 【Vue系列】vuex详解,一篇彻底搞懂vuex
  2. Unity3D 插件 Mesh To Terrain的使用方法
  3. 动能方案|智能门锁超低功耗读卡方案
  4. RHCSA之基本命令_统计文件内容篇(wc)
  5. john the ripper密码破解工具
  6. 码云-中国的github
  7. 码云简易上传的详细说明
  8. MIT Cheetah Learning (一):State Estimate
  9. node 使用命令行运行esm脚本
  10. 【模拟退火】[JSOI2016]炸弹攻击1