之前发过安装免费Let’s Encrypt SSL证书的方法一,今天介绍一下第二中方法,这个更容易一点,大致步骤差不多,也就获取证书这一步有些区别。
1. 购买VPS或云主机
国内外都有不少优秀的主机商,按照自己的业务需求购买主机吧,怎么购买我就不说了,这里推荐几个大公司的vps和云主机。
国外的VPS或云服务器就多了:
- Linode
- Vultr
- DigitalOcean – 这个前几年被国人薅羊毛薅得太严重,现在注册都很难,2020年我注册时需要人脸验证身份,估计国人也没多少人用了,因为在国内也很慢
- Banwagonhost – 国内称搬瓦工,因为提供CN2 GIA线路在国内访问非常快,被国人群起而购之,现在价格是与日俱增,至于速度现在如何不知道。
国内的云服务器:
接下来就是用的腾讯香港轻量服务器为例子,系统是centos7(2024年之后不再获得官方安全更新和支持)。你也可以用其他发行版例如Ubantu等等,步骤类似。因为购买腾讯云的话可以用Tencent OS,这个是兼容centos,他们会一直支持安全更新和支持的,即使centos停止更新。
2. 安装nginx
首先建议安装epel-release源,之后很多软件安装都会用得到,下文中是非root用户可能需要在命令前添加sudo。
yum update
yum -y install epel-release
安装yum的相关程序包:
yum install yum-utils
设置用于nginx的yum存储库,首先创建一个/etc/yum.repos.d/nginx.repo文件,可直接用vim
mkdir /etc/yum.repos.d //假如yum.repos.d不存在的话
vim /etc/yum.repos.d/nginx.repo
通过vim开启一个新的nginx.repo文件(或者你也可以用FTP软件直接添加文件),按i在文件中输入以下内容,这是nginx的稳定版,你也可以安装他们的主线版,但推荐稳定版,具体看nginx: Linux packages。
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
之后按Esc键,接着输入“:wq”保存文件。现在可以输入命令安装nginx了
yum install nginx
nginx安装好后开启nginx服务
systemctl start nginx
systemctl enable nginx
你还可以用systemctl status nginx查看nginx是否启用。假如你的域名已经绑定好了主机IP(也就是域名解析),你现在可以打开网站看看是不是有nginx的欢迎页如上图,当然输入IP也能看到以上欢迎页。
3. 安装certbot以及获取免费Let’s encrypt ssl证书
安装certbot,这个软件是获取证书必须的
yum install certbot
接下来建议给nginx创建共用的配置文件,以避免重复代码,这些在之后nginx的配置文件中用得到。
Diffie-Hellman 密钥交换 (DH) 是一种在不安全的通信通道上进行安全交换加密密钥的方法。当服务器SSL/TLS的瞬时Diffie-Hellman公共密钥小于等于1024位时,存在可以恢复纯文本信息的风险,所以我们首先,通过键入以下命令生成一组新的 2048 位 DH 参数:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
然后创建一个存放共用配置文件的文件夹,比如snippets:
mkdir /etc/nginx/snippets
可通过vim /etc/nginx/snippets/ssl.conf直接创建,然后在这个文件中添加以下内容
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
里面的一些参数如果懂得的话可以稍作调整。
现在就可以获取证书了,以下命令
certbot -d blog.qingsongb2c.com --manual --preferred-challenges dns certonly
- -d 后面跟你的域名,可为二级域名
- –manaual 手动授权方式
- –preferred-challenges 使用DNS身份验证的方法,你需要根据提示手动添加一条TXT记录到DNS中以验证你的域名,这个记录一般都很快,不需要像添加A记录那样等待。
输入命令后,应该是这样显示的
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Requesting a certificate for blog.qingsongb2c.com
Performing the following challenges:
dns-01 challenge for blog.qingsongb2c.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.blog.qingsongb2c.com with the following value:
bChlgprIzr3o-chSuV4_xmFee0Xz7k3VdF7-pf8xkts
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
如上,在你的域名管理后台添加一条名叫“_acme-challenge.blog.qingsongb2c.com”的txt记录,值为“bChlgprIzr3o-chSuV4_xmFee0Xz7k3VdF7-pf8xkts”,记得改成你自己的域名。保存好后回到你的命令界面,按Enter继续。
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/blog.qingsongb2c.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/blog.qingsongb2c.com/privkey.pem
Your certificate will expire on 2022-09-25. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
证书就创建好了,接下来配置以下nginx文件,看看网站是否已经挂锁。
4. 创建Nginx配置文件
通过vim /etc/nginx/conf.d/example.com.conf,example可改为你的域名
server {
listen 80;
server_name blog.qingsongb2c.com;
return 301 https://blog.qingsongb2c.com$request_uri;
}
server {
listen 443 ssl http2;
server_name blog.qingsongb2c.com;
root /var/www/qingsongb2c/blog;
index index.html index.php index.htm;
access_log /var/log/nginx/qingsongb2c.access.log main;
error_log /var/log/nginx/qingsongb2c-error.log;
ssl_certificate /etc/letsencrypt/live/blog.qingsongb2c.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.qingsongb2c.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/blog.qingsongb2c.com/chain.pem;
include snippets/ssl.conf;
location ~ /\.ht {
deny all;
}
}
第一个server是通过非加密域名点进来的会强制跳转到加密链接,第二个server就是加密了的站点配置了,记得将我的域名改成你的域名,同样是:wq保存,然后输入systemctl restart nginx重启nginx服务。
你可以打开你的网站看看你的浏览器前面是否加了一把小锁,不要管你的网站内容,只要配置没错,就会出现加密的小锁。
5. 自动更新Let’s Encrypt SSL证书
这种模式需要脚本API才能完成自动更新,大家可以在网上搜索。
版权声明:本文原创文章,首发于青松跨境B2C,版权所有,未经允许,请勿转载!
转载请注明:如若转载,请先取得同意,然后注明原文链接,写点东西谁也不容易。