热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安全证书CA和Openssl那些事

本文摘自码农翻身,希望能更进一步的讲解证书以及网络安全。之前在网络上的通信都是明文,中间的交换机都可

本文摘自 码农 翻身,希望能更进一步的讲解证书以及网络安全。

之前在网络上的通信都是明文,中间的交换机都可以截取、篡改数据包,于是加密算法便诞生了,

当然这其中少不了数学家的智慧。

从对称加密说起

在开始之前,我们来虚构两个人物, 一个是位于中国的张大胖(怎么又是你?!),

还有一个是位于米国的Bill

这俩哥们隔着千山万水,通过网络联系上了, 两个人臭味相投,聊得火热。

有一天, Bill 突然意识到: 坏了, 我们的通信是明文的, 这简直就是网络上裸奔啊,

任何一个不怀好意的家伙都可以监听我们通信,打开我们发送的数据包,窥探我们的隐私啊。

安全证书 CA和Openssl那些事

最容易想到也就是上面的方案,既然明文不行,那我就做一次加密,用密文发送。

重点在于

加密和解密算法是公开的,那个密钥是保密的,也就是对称加密算法

但是怎么保证密钥不被截取?仿佛回到了鸡生蛋蛋生鸡的问题上。

用非对称加密解决?

Bill 和 张大胖的通信无法加密,说话谨慎了不少, 直到有一天, 他们听说了一个叫做RSA的非对称加密算法,一下子来了灵感。

这个RSA算法非常有意思,它不是像之前的算法, 双方必须协商一个保密的密钥, 而是有一对儿钥匙, 一个是保密的,称为私钥,另外一个是公开的,称为公钥。

当然RSA的特性在于公钥加密过的数据,只能用私钥来解密。

所以说上述的聊天过程应该变成这样

安全证书 CA和Openssl那些事

非对称加密+对称加密

因为RSA算法比之前的对称密钥算法要慢上百倍,这样为了安全都不能愉快的聊天了。

但是可以把两者结合起来

(1) 我生成一个对称加密算法的密钥, 用RSA的方式安全发给你

(2) 我们随后就不用RSA了, 只用这个密钥,利用对称加密算法来通信

下面开始正式介绍证书

证书分类

根据秘钥对的产生方式,可将证书分为两类:签名证书和加密证书。

根据证书的用途,通常将证书分为SSL服务器证书、SSL客户端证书、代码签名证书、Email证书,时间戳服务器证书、OCSP服务器证书等。

根据文件格式,以下为Windows支持的证书格式

安全证书 CA和Openssl那些事

下图大致描述了SSL服务端证书的使用流程

安全证书 CA和Openssl那些事

Openssl

SSL(Secure Socket Layer) 安全协议是由 Netscape 公司首先提出,最初用在保护 Navigator 浏览器和 Web 服务器之间的 HTTP 通信 ( 即 HTTPS) 。后来 SSL 协议成为传输层安全通信事实上的标准,并被 IETF 吸收改进为 TLS(Transport Layer Security) 协议。 SSL/TLS 协议位于 TCP 协议和应用层协议之间,为传输双方提供认证、加密和完整性保护等安全服务。 SSL 作为一个协议框架,通信双方可以选用合适的对称算法、公钥算法、 MAC 算法等密码算法实现安全服务。

OpenSSL 是著名的 SSL 的开源实现,是用 C 语言实现的。

Openssl包括三大类命令,,分别是是常用命令、消息摘要和密码命令。

Standard commands
asn1parse         ca                ciphers           cms
crl               crl2pkcs7         dgst              dh
dhparam           dsa               dsaparam          ec
ecparam           enc               engine            errstr
gendh             gendsa            genpkey           genrsa
nseq              ocsp              passwd            pkcs12
pkcs7             pkcs8             pkey              pkeyparam
pkeyutl           prime             rand              req
rsa               rsautl            s_client          s_server
s_time            sess_id           smime             speed
spkac             srp               ts                verify
version           x509

Message Digest commands (see the `dgst' command for more details)
md4               md5               rmd160            sha
sha1

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb
aes-256-cbc       aes-256-ecb       base64            bf
bf-cbc            bf-cfb            bf-ecb            bf-ofb
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb
des               des-cbc           des-cfb           des-ecb
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb
des-ofb           des3              desx              rc2
rc2-40-cbc        rc2-64-cbc        rc2-cbc           rc2-cfb
rc2-ecb           rc2-ofb           rc4               rc4-40
seed              seed-cbc          seed-cfb          seed-ecb
seed-ofb

接下来就让我们来用openssl自建CA实现SSL服务的证书

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.pem \
-subj '/C=AA/ST=AA/L=AA/O=AA Ltd/OU=AA/CN=AA/emailAddress=aa@aa.com'


openssl genrsa -out client1.key 2048
openssl req -new -key client1.key -out client1.csr \
-subj '/C=BB/ST=BB/L=BB/O=BB Ltd/OU=BB/CN=BB/emailAddress=bb@bb.com'


openssl x509 -req -days 365 -CA rootCA.pem -CAkey rootCA.key \
-CAcreateserial -CAserial serial -in client1.csr -out client1.pem

openssl verify -verbose -CAfile rootCA.pem client1.pem
mkdir private
openssl genrsa -out private/cakey.pem 2048
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
touch index.txt serial crlnumber 
echo 01 > serial

openssl genrsa -out httpd.key 2048
openssl req -new -key httpd.key -out httpd.csr
openssl ca -in httpd.csr -out httpd.crt -days 365


openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

openssl pkcs12 -export -in admin.pem -inkey admin-key.pem -certfile ca.pem -out kube-admin.p12

openssl x509 -req -in haimaxy.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key
  -CAcreateserial -out haimaxy.crt -days 500
  
  
  
  
 
openssl genrsa  -out root-ca.key 2048

openssl req -new -key root-ca.key -out root-ca.req

openssl x509 -req -days 365 -signkey root-ca.key -in root-ca.req -out root-ca.cer
---
openssl x509 -noout -text -in root-ca.cer
----
openssl genrsa  -out server.key 2048

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

openssl ca -config ./openssl.cnf  -in server.req -out server.cer

安全证书 CA和Openssl那些事 安全证书 CA和Openssl那些事

openssl x509 -noout -text -in kubernetes.pem

openssl rsa -noout -text -in myserver.key

openssl req -noout -text -in myserver.csr

openssl x509 -noout -text -in ca.crt

openssl verify selfsign.crt

openssl verify -CAfile ca.crt myserver.crt

参考

http://seanlook.com/2015/01/18/openssl-self-sign-ca/

https://www.barretlee.com/blog/2016/04/24/detail-about-ca-and-certs/

http://qimingyu.com/2017/04/28/%E8%87%AA%E5%BB%BACA%E5%AE%9E%E7%8E%B0HTTPS%E6%95%99%E7%A8%8B/

http://blog.51cto.com/xxrenzhe/1370114

https://razeen.me/post/what-ct-is-and-how-it-works.html

https://access.redhat.com/documentation/en-US/Red_Hat_Certificate_System/8.0/html/Admin_Guide/Standard_X.509_v3_Certificate_Extensions.html

以上所述就是小编给大家介绍的《安全证书 CA和Openssl那些事》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • 移动传感器扫描覆盖摘要:关于传感器网络中的地址覆盖问题,已经做过很多尝试。他们通常归为两类,全覆盖和栅栏覆盖,统称为静态覆盖 ... [详细]
  • CISCO ASA防火墙Failover+multiple context详细部署By 年糕泰迪[操作系统入门]
    一.文章概述本文主要就CISCOASA防火墙的高可用和扩张性进行阐述和部署。再cisco防火墙系列中主要有3种技术来实现高可用和扩张性。分别是Failover,multiplese ... [详细]
  • 加密、解密、揭秘
    谈PHP中信息加密技术同样是一道面试答错的问题,面试官问我非对称加密算法中有哪些经典的算法?当时我愣了一下,因为我把非对称加密与单项散列加 ... [详细]
  • elixirerlang通过AyandaDubeFIPS(联邦信息处理标准)[1]是由NIST(美国国家标准技术研究院)定义 ... [详细]
  • 路由器当做交换机使用
    2019独角兽企业重金招聘Python工程师标准TP-Link路由器当做交换机使用时要注意一下几点:1.闲置路由器管理地址更改避免与主路由器发生冲突导致无法连接 ... [详细]
  • 本文介绍了如何在Mac上使用Pillow库加载不同于默认字体和大小的字体,并提供了一个简单的示例代码。通过该示例,读者可以了解如何在Python中使用Pillow库来写入不同字体的文本。同时,本文也解决了在Mac上使用Pillow库加载字体时可能遇到的问题。读者可以根据本文提供的示例代码,轻松实现在Mac上使用Pillow库加载不同字体的功能。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 本文介绍了在Android Studio中使用命令行build gradle的方法,并解决了一些常见问题,包括手动配置gradle环境变量和解决External Native Build Issues的方法。同时提供了相关参考文章链接。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
author-avatar
桃花源主ITXB
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有