一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
SSL可确保互联网连接安全,并防止网络传输信息被泄露。
开启https必须有ssl证书,商业证书来源于受信任的CA机构签发,通常需要付费,当然在阿里云和腾讯云的域名服务中有免费的证书可以申请,但一般机构签发的ssl证书只能用于域名。
在一些特殊情况下我们需要给网址配置ssl来确保互联网链接的安全性,比如业务需要、应用安全要求,但没有或不方便配置域名。
在许多 Linux 分发版中已捆绑 OpenSSL工具,这里使用openssl工具来生成自签证书。
分为两个步骤:
- 创建根证书
- 使用根证书签发证书
创建根密钥
openssl genrsa -out privatekey.pem 2048
回车之后就可以得到一个私钥privatekey.pem
注意,网上很多教程写的1024,但实测发现nginx会报routines:SSL_CTX_use_certificate:ee key too small错误。
证书签名请求
openssl req -new -key privatekey.pem -out private-csr.pem
回车之后会有很多信息需要输入,可以直接回车通过。
但在Common Name这里需要注意填入你的IP或者域名:
Common Name (e.g. server FQDN or YOUR name) []:xxx.xxx.xxx.xxx
自签名证书
openssl x509 -req -days 365 -in private-csr.pem -signkey privatekey.pem -out certificate.pem
得到一个自签名证书certificate.pem
配置nginx
在nginx/con.f目录下创建xxx.conf文件。
server {
listen 433 ssl;
ssl_certificate /xxx/xxx/certificate.pem;
ssl_certificate_key /xxx/xxx/privatekey.pem;
location / {
proxy_pass http://127.0.0.1:30000;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
完成后执行
nginx -s reload
使配置生效。
效果
如果使用的云服务器记得在控制台打开相应的端口。
直接访问浏览器会报隐私错误,与此站点的连接不安全,我们忽视即可,点击高级选择继续访问
因为不是受信任机构颁发的证书,所以在chromium内核的浏览器中会有图中的红色警告标志。
但这就代表我们的ssl配置生效了。
跳过访问中的“不安全”
在chromium内核的浏览器中,会将这种证书视为“不安全”,但一般可以选择高级模式强行访问;
但在高版本中chrome经常会直接阻止继续访问,这时候我们可以在网页上盲输入 this is unsafe 即可跳过。