一、http和https的区别与原理
介绍原理的博文太多了,这里列出一篇详细的:
二、证书的类型和自制证书生成
1.什么是数字证书(Certificate)
在HTTPS的传输过程中,有一个非常关键的角色——数字证书,那什么是数字证书?又有什么作用呢?
所谓数字证书,是一种用于电脑的身份识别机制。由数字证书颁发机构(CA)对使用私钥创建的签名请求文件做的签名(盖章),表示CA结构对证书持有者的认可。数字证书拥有以下几个优点:
- 使用数字证书能够提高用户的可信度
- 数字证书中的公钥,能够与服务端的私钥配对使用,实现数据传输过程中的加密和解密
- 在证认使用者身份期间,使用者的敏感个人数据并不会被传输至证书持有者的网络系统上
X.509证书包含三个文件:key,csr,crt。
- key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
- csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
- crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。
关于这三种证书的区别和原理,以及前两种证书的申请方式,网上介绍太多了,大家可以自行搜索。
2.付费商业证书
要钱。
3.免费商业证书
腾讯云和阿里云都能申请免费商业证书,好像都是一年,一年到期怎么续签不太清楚。腾讯云申请免费商业证书没试过,阿里云现在申请免费商业证书步骤比较深。
4.自制证书
工具:
OpenSSL ssl的开源实现,几乎实现了市面上所有的加密
libcrypto: 通用加密库, 任何软件要实现加密功能 链接调用这个库
libssl: TLS/SSL 加密库
openssl: 命令行工具 多功能多用途工具 实现私有证书颁发机构
子命令:
genrsa [-out filename] [-passout arg] [numbits]
generate an RSA private key
生成一个 RSA 的私钥 (公钥是从私钥中提取的,有了私钥 就有公钥)
openssl rsa -in ca.key -pubout 提取私钥
创建证书的基本流程
-
生成自己的服务端私钥 Server Key
-
输入基本信息并用私钥签名生成CSR 证书签名请求(csr中间文件可以不生成,直接生成crt文件)
-
提交CSR给证书机构CA(免费或商业证书)签名生成CRT,或自己做CA签名生成CRT(自签名证书)
生成RSA服务器私钥:
openssl genrsa -out server.key 2048
输出的server.key文件就是服务器私钥,2048是密钥长度,要求不高的话用4096也可。
执行命令 生成 CSR 文件:
openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout myprivate.key -out mydomain