SSL证书、申请及部署
什么是SSL、TLS?
在SSL/TLS出现之前,很多应用层协议(http、ftp、smtp等)都存在着网络安全问题,例如大家所熟知的http协议,在传输过程中使用的是明文信息,传输报文一旦被截获便会泄露传输内容;传输过程中报文如果被篡改,无法轻易发现;无法保证消息交换的对端身份的可靠性。为了解决此类问题,人们在应用层和传输层之间加入了SSL/TLS协议。尽管SSL协议已经被TLS取代,但SSL证书这一术语仍然广泛使用,通常指代TLS/SSL证书。
TLS的优势在于它与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合,应用层协议可以透明地运行在TLS之上,由TLS进行创建加密通道所需的协商和认证。TLS实际上是SSL的升级版本。
什么是HTTPS?
HTTPS协议就是在HTTP的基础上实施了TLS加密。TLS/SSL基于非对称加密算法,RSA是非对称加密算法的佼佼者。RSA会生成两个密钥,一个为公钥,另一个为私钥
- 私钥要严密保管,除了拥有者禁止别人接触,如一个网络服务器中存放的私钥。任何公钥加密的数据只能被私钥解密,任何被私钥加密的东西也只能被公钥解密。
- 私钥加密,公钥解密:这就是签名
- 公钥加密,私钥解密:这就是安全传输,确保发送的信息只能被私钥拥有者读懂。
非对称加密和对称加密
自己理解就是使用同一个密钥进行解密和加密就是对称加密。
而非对称加密就是一个密钥进行加密,只能用另一个密钥进行解密。
非对称加密解决的是密钥在传输过程中不安全的问题。
CA机构(数字证书颁发机构)
为了有效解决信任问题,引入了第三方“认证机构”。在收到的请求回复时,证书的验证可以知道,是否访问的是认真的网址,而不是冒充的机构。CA机构解决了https请求中可能存在的中间人攻击。
Let's Encrypt:官网
该机构是一个非盈利机构,可以免费申请证书。官网建议如果可以通过SSH连接主机,最好用Certbot软件来配置获取CA证书,具体如何使用Certbot可以看其官网
如何用Certbot部署证书实现https访问?
首先可以申请的证书有default和wildcard两种:默认就是一个具体域名申请一个证书,wildcard就是通过通配符来申请证书。比如*.example.com来申请证书就可以为多个二级域名申请证书,而不用一个个申请。
下面以wildcard证书的申请为例:
- 先安装各种依赖库。为了不与默认的python环境的别的库冲突,建议在虚拟环境进行安装。
sudo apt update
sudo apt install python3 python3-venv libaugeas0
-
删除通过apt安装的certbot包,确保使用certbot命令时是certbort包对应的,而不是系统包对应的
sudo apt-get remove certbot
-
创建虚拟环境并安装certbot库
sudo python3 -m venv /opt/certbot/ sudo /opt/certbot/bin/pip install --upgrade pip sudo /opt/certbot/bin/pip install certbot certbot-nginx
-
将虚拟环境目录链接到主机目录,从而可以直接用
certbot
命令调用。sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
-
手动进行配置certbot实现泛域名(wildcard)解析
certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
其中这里的
--preferred-challenges
是表示的用于验证域名归属的方式,这里选择通过dns解析值txt来验证。 -
完成上述步骤根据提示操作后,就生成了证书,显示只有3个月的有效期。
- 证书保存在
/etc/letsencrypt/live/example.com/fullchain.pen
- 密钥保存在
/etc/letsencrypt/live/example.com/privkey.pem
- 证书保存在
`