配置SSL证书

这篇笔记记录如何用openssl生成一个自签名证书,以及如何在Nginx中配置SSL证书。

生成自签名证书

这里我们使用Linux下的openssl命令生成一个自签名证书。生成证书的步骤其实很好理解,我们先生成一个私钥,然后根据私钥生成一个包含公钥的证书,发布到网络上即可。

步骤1:首先生成一个RSA私钥,秘钥我们使用RSA 2048,对称加密算法使用3DES,生成文件名为server.key,生成时,会要求我们输入密码。

openssl genrsa -des3 -out server.key 2048

步骤2:这里还需要生成一个CSR文件(Certificate Signing request,证书请求文件),这一步会要求输入一些内容,按要求输入即可。

openssl req -new -key server.key -sha256  -out server.csr

步骤3:生成自签名证书

openssl x509 -req -days 365 -in server.csr -signkey server.key -sha256 -out server.crt

这里生成的.crt文件就是证书了。

注:许多政府机关、国企的HTTPS网站都是使用的自签名证书,用户必须手动下载安装证书,其实不是买不起,而是由于国内互联网起步晚,证书颁发这个操作被欧美垄断了,但我们又不能让证书的「合法性」掌握在美国人手中。而个人网站为了避免让用户安装证书的麻烦,通常使用Let's encrypt等提供的免费证书。

配置Nginx

配置Nginx时,还需要指定额外的一个文件,作为ssl_password_file的配置项,里面的内容是生成证书时输入的密码。

实际上,如果配置了SSL证书,Nginx启动时会要求输入密码。但是,Linux下我们的Nginx是通过systemd来管理启动的,因此没有手动输入密码的步骤就会报错,所以这里必须加上密码配置。

server {
        listen 443 ssl;
        listen [::]:443 ssl;

        ssl_certificate /home/ubuntu/workspace/server.crt;
        ssl_certificate_key /home/ubuntu/workspace/server.key;
        ssl_password_file /home/ubuntu/workspace/passphrase;

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        location / {
                try_files $uri $uri/ =404;
        }
}

由于SSL证书是我们自签名的,所以访问时浏览器会给我们一个大大的警告,我们不用理它。

针对80端口的兼容配置

假如我们的网站之前使用的是HTTP,位于80端口,很多用户喜欢我们的网站,加入了收藏夹,加为了友情链接,或者把链接收藏在笔记本中。如果我们突然把80端口关闭改为443,这部分用户就会无法访问我们的网站。较好的解决方案是针对80端口的请求,直接301重定向到443端口,这可以用重写URL实现。

server {
        listen 80;
        server_name www.aaa.com;
        rewrite ^(.*)$ https://$host$1 permanent;
}

个人网站证书获取

我们自己的小网站如果使用自签名证书,肯定是不符合实际的。个人网站一般通过Let's encrypt颁发免费证书,这样既可以使用HTTPS,用户访问时也不会有证书风险的提示了。而Let's encrypt免费证书可以通过certbot程序自动申请、修改Nginx配置文件、续期等。

我们可以在官网获取CertBot的安装方式,CertBot官方网站:https://certbot.eff.org/

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap