openssl方法以及原理

本文介绍了OpenSSL的基础概念,包括对称加密与非对称加密的区别,RSA、DSA、SHA和MD5算法的作用。详细讲解了CA、PEM、DER、X509和PKCS在证书生成和传输中的角色。此外,还概述了从CA根证书生成到用户证书的流程,以及在HTTPS请求中如何使用证书。提供了几个Python程序示例及参考资料链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础概念

  • 对称加密: 一个密码加密,同样的密码解密
  • 非对称加密:一个密码加密,另一个密码解密(公钥,私钥)
  • 素数积求因子
  • 公钥加密,私钥解密的情况通常被称为加密解密
  • 私钥加密,公钥解密的情况被称为签名和验证签名

注:公钥是给别人用的,别人用来加密。私钥是给自己用的,用来给自己的文件写上签名。

RSA/DSA/SHA/MD5

非对称加密算法

  • RSA: RSA可以用与加密解密,也可以签名验签名
  • DSA: 只能用于签名
  • SHA/MD5: 摘要算法,依据数据内容生成一种固定长度的摘要
    注:实际过程中,要传输的数据可能很大,加密比较费时,所以一般把源数据先进行摘要,对摘要进行加密,传输明文和加密之后的摘要。(有疑问)

CA/PEM/DER/X509/PKCS

  • 生成公钥和私钥之后,需要传输公钥给别人使用,但是传输过程中可能被恶意破坏。为了解决这个问题需要一个公正方做这个事情,任何人都能找它来确认公钥是谁发的。这就是CA。
  • CA:将自己的公钥发给所有人,想要发布公钥的人可以将自己的公钥信息和一些身份信息发给CA,CA用自己的秘钥加密,也称之为签名。然后这个包含了你的公钥和你信息的文件就可以称之为证书文件。CA类似于发驾照的地方,证书类似于驾照.
  • 根证书:是CA给自己颁发的证书,是信任连的起点。任何安装CA根证书的服务器都意味着对这个CA认证中心式信任的。
  • 数字证书:CA对证书申请者真实身份验证之后,用CA的根证书对申请人
  • x509证书链:
    • key: 私用秘钥,openssl格式,通常rsa算法
    • csr: 证书请求文件,用户申请证书。在制作csr文件的时候,必须使用自己的私钥来签署申请,还可以设定一个秘钥。证书签名请求(certificate signing request)
    • crt: 是CA认证后的认证后的证书文件,签署人用自己的key给你签署的凭证
    • crl: 证书吊销列表, Certificate Revocation List的缩写
    • pem: 用于导入导出证书时候的证书格式,有证书开头,结尾的格式

使用过程

1. CA根证书生成过程

# 生成CA私钥
openssl genrsa -out ca.key 2048
# 生成证书请求文件,作用是什么呢?
openssl req -new -key ca.key -out ca.csr
# 生成CA证书,使用私钥进行签名
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

2. 用户证书

  • 服务器端证书生成
# 生成私钥
openssl genrsa -des3 -out server.key 1024
# 生成证书请求文件
openssl req -new -key server.key -out server.csr
# 生成证书
openssl ca -in server.csr -out server.crt
  • 客户端证书生成
# 生成私钥
openssl genrsa -des3 -out client.key 1024
# 生成证书请求文件
openssl req -new -key client.key -out client.csr
# 生成证书文件
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
  • 生成pem格式证书
cat client.crt client.key > client.pem
cat server.crt server.key > server.pem

https请求使用证书

基本python程序

  • hello world程序
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
	return "Hello World!"

if __name__ == '__main__':
	app.run(debug=True, host='0.0.0.0', port=5555)

# 使用证书
#if __name__ == '__main__':
#	app.run(debug=True, host='0.0.0.0', port=5555, ssl_context=("server-cert.pem", "server-key.pem"))

参考文章

flask服务使用证书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值