使用Nginx给ip配置HTTPS服务

4,036 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

SSL可确保互联网连接安全,并防止网络传输信息被泄露。

开启https必须有ssl证书,商业证书来源于受信任的CA机构签发,通常需要付费,当然在阿里云和腾讯云的域名服务中有免费的证书可以申请,但一般机构签发的ssl证书只能用于域名。

在一些特殊情况下我们需要给网址配置ssl来确保互联网链接的安全性,比如业务需要、应用安全要求,但没有或不方便配置域名。

在许多 Linux 分发版中已捆绑 OpenSSL工具,这里使用openssl工具来生成自签证书。

分为两个步骤:

  1. 创建根证书
  2. 使用根证书签发证书

创建根密钥

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

使配置生效。

效果

如果使用的云服务器记得在控制台打开相应的端口。

直接访问浏览器会报隐私错误,与此站点的连接不安全,我们忽视即可,点击高级选择继续访问

image.png

因为不是受信任机构颁发的证书,所以在chromium内核的浏览器中会有图中的红色警告标志。

但这就代表我们的ssl配置生效了。

跳过访问中的“不安全”

在chromium内核的浏览器中,会将这种证书视为“不安全”,但一般可以选择高级模式强行访问;

但在高版本中chrome经常会直接阻止继续访问,这时候我们可以在网页上盲输入 this is unsafe 即可跳过。