抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前言

之前建站的时候就配过了一次了,刚好新人任务有要求,就简单记录一下

https由于传输原理的问题会比http要慢,在2012年谷歌提出SPDY的方案来应对https存在的延迟等问题。http2相比于https有了一些新特性。于是这里配置http2.

配置http2

使用免费的Let’s Encrypt,在官网中会告诉你用 Certbot ACME 客户端自动配置,进去选择自己的nginx版本和系统版本就好了。页面上会出现操作步骤。

1
2
sudo snap install core;
sudo snap refresh core
1
sudo snap install --classic certbot 
1
sudo ln -s /snap/bin/certbot /usr/bin/certbot
1
sudo certbot --nginx

于是certbot就自动配置好nginx

使用这个来自动续订:

1
sudo certbot renew --dry-run

我们也可以手动折腾一下。

申请证书:

1
sudo certbot --nginx --register-unsafely-without-email certonly

选择对应的nginx配置文件(注意,它需要是正确可用的配置,可以执行sudo nginx -t来检查配置),此后letsencrypt证书将会自动生成在/etc/letsencrypt/live/your_conf_file中。

基本配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server { 
listen 80;
server_name yoursite;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
server_name yoursite;
ssl_certificate /etc/letsencrypt/live/your_conf_file/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_conf_file/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

此时https已配置完成。

禁止不安全的协议:

1
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4'; 

启用HSTS:

1
2
ssl_prefer_server_ciphers on; 
add_header Strict-Transport-Security max-age=15768000;
1
2
3
4
5
6
server { 
listen 80;
server_name yoursite;
add_header Strict-Transport-Security max-age=15768000;
return 301 https://$server_name$request_uri;
}

其他的安全配置

缓存连接凭据:

1
2
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 60m;

配置赫尔曼密钥:

1
2
openssl dhparam -out dhparam.pem 2048 #在 ssh 运行, openssl 生成 2048 位的密钥而不是当作参数写入 nginx.conf 文件
ssl_dhparam /path/to/dhparam.pem; #在 .conf 中配置

OCSP 缝合

1
2
3
4
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/cert/trustchain.crt;
resolver 233.5.5.5 233.6.6.6 valid=300s;

泛域名证书

certbot支持泛域名证书了

1
certbot certonly --preferred-challenges dns --manual  -d *.k8s.ryaoknw.site --server https://acme-v02.api.letsencrypt.org/directory

评论