Https、SSL/TLS以及证书入门
来源:互联网 发布:windows远程桌面 编辑:程序博客网 时间:2024/06/08 12:10
HTTPS
https是基于TLS/SSL的安全套接字应用层协议,除了传输层进行加密外,其它与常规HTTP协议基本保持一致。所以此处主要介绍后面的TLS/SSL和证书。
TLS/SSL
- TLS是传输层安全协议(Transport Layer Security)的缩写,是一种对基于网络传输的加密协议,可以在受信任的第三方公正基础上做双方的身份认证。TLS可以用在TCP上,也可以用在无连接的UDP报文上。协议规定了身份认证、算法协商、密钥交换等的实现。
- SSL是TLS的前身,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。
TLS基本运行过程
TLS协议的基本思路是采用非对称加密的算法,客户端先获取到服务器端的公钥,然后用公钥加密信息,服务器端收到密文后,用自己的私钥解密。
TLS协议基本过程 :
客户端向服务器端索要并验证公钥(通过可信任的证书)。
双方协商生成“对话密钥”。
双方采用“对话密钥”进行加密通信。
前两个过程,又称为“握手阶段(handshake)”
这里,存在两个问题:
如何保证公钥在传输的过程中不会被篡改?
将公钥放在数字证书中。只要证书可信,公钥就是可信的。那么问题又来了,证书如何可信,请看证书部分?
公钥加密计算量太大,如何减少消耗的时间?
每一次对法(session),客户端和服务端都生成一个“对话密钥”(session key),用它来加密信息,由于“对话密钥”是对称加密,所以运算速度非常快,而服务器公钥只用于加密“对话密钥”本身,这样就减少了加密运算的消耗时间。
证书
证书的作用:
加密通信,所有的信息加密传输,第三方无法窃听。
- 身份验证,防止身份被冒充。
- 校验机制,一旦被篡改,通信双方会立刻发现。
不同格式证书的转换
一般证书有三种格式:
- PEM(.pem) 前面命令生成的都是这种格式,
- DER(.cer .der) Windows 上常见
- PKCS#12文件(.pfx .p12) Mac上常见
证书的生成
OpenSSL使用x509命令生成证书。自己制作证书有两种方式:一种是Self Signed,另一种是生成自己的CA,然后由这个CA来发布需要的证书。这里需要区分两个概念:证书(certificate)和证书请求(certificate sign request)
- 证书是自签名或CA签名过的凭据,用来进行身份认证
- 证书请求是对签名的请求,需要使用私钥进行签名
Self Signed证书
一般自签证书不能用来进行身份认证,如果一个server端使用自签证书,client端要么被设置为无条件信任任何证书,要么需要将自签名证书的公钥和私钥加入受信任的列表。但这样一来就增加了server的私钥泄漏的风险
生成Self Signed证书的过程:
1.生成自签名私钥:openssl genrsa -des3 -out selfsign.key 4096(建议输入密码)2.生成证书签名请求:openssl req -new -key selfsign.key -out selfsign.csr 注:selfsign.csr中含有selfsign.key的公钥,保证common Name(CN)是最重要的,它代表你的证书要代表的目标,如果你为网站申请证书,就要添加你的域名。3.对上一步生成的证书签名请求进行签名:openssl x509 -req -days 365 -in selfsign.csr -signkey selfsign.key -out selfsign.crt4.一个比较简单的方法就是用下面的命令,一次生成key和证书openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt
注意:确保私钥的安全性,因为该证书无法被吊销
TLS基于CA的身份认证的基本原理
首先,验证方需要信任的CA机构提供一个Root CA证书。(假设Root CA证书在受信任证书列表中,或者可以通过安装“根证书”的方式安装。
然后,被验证方对被验证的证书进行签名(私钥加密),生成待验证的证书。
最后,验证方拿到待验证的证书后,利用Root CA证书中包含的公钥进行解密,得到被验证方的原始证书。
根据RSA的加密原理,如果用Root CA的公钥解密成功,说明待验证证书确实是用Root CA的私钥加密的,可以被认为被验证方是受信的
创建私有CA,然后用该CA给证书进行签名的过程:
1.创建CA私钥:openssl genrsa -des3 -out ca.key 40962.生成CA的自签名证书:openssl req -new -x509 -days 365 -key ca.key -out ca.crt 注:其实CA证书就是一个自签名证书3.生成服务端私钥 :openssl genrsa -des3 -out server.key 40964.需要签名的对象(服务端)生成证书签名请求:openssl req -new -key server.key -out server.csr 注:证书签名请求当中的Common Name必须区别与CA的证书里面的Common Name5.用步骤2创建的CA证书给步骤4生成的签名请求进行签名openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
去掉key的密码保护
每次输入密码太繁琐,可以把Key的保护密码去掉。
openssl rsa -in privateKey.key -out server.key.insecure
查看证书信息
# 查看KEY信息> openssl rsa -noout -text -in selfsign.key# 查看CSR信息> openssl req -noout -text -in selfsign.csr# 查看证书信息> openssl x509 -noout -text -in selfsign.crt# 验证证书# 会提示self signed> openssl verify selfsign.crt# 因为root.crt 是由test.crt发布的,所以会验证成功> openssl verify -CAfile test.crt root.crt
- Https、SSL/TLS以及证书入门
- https SSL TLS
- SSL,TLS,HTTPS
- HTTPS详解SSL/TLS
- HTTPS详解SSL/TLS
- Https SSL/TLS详解
- HTTPS详解SSL/TLS
- TLS/SSL 及 HTTPS
- HTTPS/SSL/TLS
- https和ssl证书入门和域名解析
- 证书和SSL或TLS
- Https(SSL/TLS)原理详解
- Https(SSL/TLS)原理详解
- Https(SSL/TLS)原理详解
- Https(SSL/TLS)原理详解
- 深入浅出https协议(ssl/tls)
- HTTPS和SSL/TLS协议
- Https(SSL/TLS)原理详解
- 欢迎使用CSDN-markdown编辑器
- C编程基础
- 开始每天写博客
- 携程App的网络性能优化实践
- Spark 1.6RPC解析
- Https、SSL/TLS以及证书入门
- 解读 Linux 性能指标
- 【积累】 int 10进制 byte 16进制,BCD码 String之间的转换
- Struts2开发基础
- 半兼容ARM的软核处理器编写-5
- django中的csrf与后台模块处理
- 响铃:秒拍掘金垂直化内容,到底是不是个好主意?
- 原型
- Http协议简介