发布时间:2023-02-23 16:30
首先简单说一下https的原理。即服务端与客户端(浏览器)如何保证数据是加密传输的呢?我记得有个经典的例子:
很经典吧,但如果第一步服务端发给客户端的时候被黑客拦截了,并替换了黑客自己的箱子和锁。客户端是无法甄别的。
所以在上述的过程中还需要对锁进行签名,即比如王麻子牌锁,客户端是信任的。而其他牌子的锁,浏览器是会给予不安全的提示的。
以上描述的加了签名的锁,就是指数字证书。故我们需要在服务端配置数字证书,从而在连接建立的时以便发送给客户端。所以我们得买品牌锁,也就是有公信力的数字证书。而阿里云是可以购买免费证书的。
上图中是阿里云安装证书的整个流程。其中DV证书就可以免费申请。但他不支持泛解析,只能配置单独一个域名。听起来有点鸡肋,但毕竟免费的,还要啥自行车啊。
具体的证书购买流程如下:
当然最后价格0元,购买成功后还需要申请审核,审核基本是秒过。审过通过就可以下载证书了。
之后点击后边的下载即可获取到证书。
话说阿里云在点击证书下载的时候会有相关的文档,我这里配置的是nginx
下载证书后将其上传的nginx的根目录中,可以建立一个cert文件夹,然后放入。接着在conf.d
目录中添加一个新的server,比如我这里加了一个gateway.conf配置文件,并赋值以下内容进去:
#以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。
server {
listen 443 ssl; #配置HTTPS的默认访问端口号为443。此处如果未配置HTTPS的默认访问端口,可能会造成Nginx无法启动。Nginx 1.15.0以上版本请使用listen 443 ssl代替listen 443和ssl on。
server_name www.certificatestests.com; #将www.certificatestests.com修改为您证书绑定的域名,例如:www.example.com。如果您购买的是通配符域名证书,要修改为通配符域名,例如:*.aliyun.com。
root html;
index index.html index.htm;
ssl_certificate cert/domain name.pem; #将domain name.pem替换成您证书的文件名称。
ssl_certificate_key cert/domain name.key; #将domain name.key替换成您证书的密钥文件名称。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。
ssl_prefer_server_ciphers on;
location / {
root html; #站点目录。
index index.html index.htm;
}
}
以上,仔细阅读注释。比如Nginx 1.15.0以上版本请使用listen 443 ssl代替listen 443和ssl on。
之后重启Nginx,在浏览器中使用https访问页面,是不是在地址栏看到了久违的锁图标
可选配置Http自动跳转https
server
{
listen 80;
server_name yourdomain.com;
rewrite ^(.*) https://$host$1 permanent;
}
如果配置之后发现无法访问,可能是防火墙或安全组为开启433的端口。