编程技术分享平台

网站首页 > 技术教程 正文

ubuntu,添加并使用https(ubuntu 添加环境变量)

xnh888 2024-10-11 20:26:32 技术教程 26 ℃ 0 评论

以Ubuntu 系统和 Nginx 为例讲解如何在服务器上部署 Let's Encrypt 证书。

第一步:安装客户端

在终端执行如下指令。

sudo apt-get install letsencrypt

Let's Encrypt 客户端名称可能是 letsencrypt 或 certbot. 请用 which 指令看看你属于哪一种情形。后文将统一使用 letsencrypt 指令,如有需要请自行替换成 certbot.

第二步:获取证书

假设你已经获取了 example.com 的域名,并且其 DNS A Record (不能是CNAME) 指向了当前服务器的 IP 地址。Let's Encrypt 客户端会通过查询 DNS 信息验证服务器的身份。在这里,我推荐使用独立模式(standalone)获取和更新证书。

由于客户端要使用 80 或 443 端口,请首先关闭占用此端口的程序。通常停止 Nginx 即可。

sudo service nginx stop

然后在终端输入下面的指令获取证书。

sudo letsencrypt certonly --standalone

接下来会出现一个文字图形界面。先输入电子邮件地址。

最后输入服务器的域名。在具有 DNS 记录的前提下,你还可以加上任何你想要的二级域名。稍等片刻,客户端就会完成身份验证。证书与相关信息存放在 /etc/letsencrypt文件夹下。请将它备份至一个安全的地方。

第三步:配置 Nginx

如果你已经配置好了 HTTP 服务,/etc/nginx/nginx.conf 文件中应该有类似下面的片段。

http {
 server {
 listen 80; 
 listen [::]:80;
 server_name example.com www.example.com;
 location / {
 root /var/www/html;
 }
 ...
 }
 ...
}

你需要再加上一个 server 条目用于 HTTPS 服务。改完之后的结果是这个样子。

http {
 server {
 listen 80; 
 listen [::]:80;
 server_name example.com www.example.com;
 location / {
 root /var/www/html;
 }
 ...
 }
 server {
 listen 443 ssl;
 server_name example.com www.example.com;
 ssl_certificate /etc/letsencrypt/live/example.com/cert.pem;
 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
 location / {
 root /var/www/html;
 }
 ...
 }
 ...
}

记得把所有 example.com 替换成你自己的域名。

保存配置文件,启动 Nginx.

sudo service nginx start

恭喜你已经成功部署了 Let's Encrypt 证书!

证书的更新

Let's Encrypt 证书有效期为三个月,你需要在证书到期之前续约。官方会在证书到期前向你发送邮件,因此不必担心错过日期。你可以运用 cron 实现证书的自动更新,不过手动操作已经足够简单了。

# 先停止 Nginx, 释放端口
sudo service nginx stop
# 更新证书
sudo letsencrypt certonly --standalone
# 启动 Nginx
sudo service nginx start


进阶:HTTPS 跳转

现在,你的服务器同时接受 HTTP 和 HTTPS 请求。如果你希望只受理 HTTPS 请求,可以在 nginx.conf 中添加一个 301 跳转规则,告知浏览器将 HTTP 变成 HTTPS.

http {

server {

listen 80;

listen [::]:80;

server_name example.com www.example.com;

return 301 https://$server_name$request_uri;

}

server {

listen 443 ssl;

server_name example.com www.example.com;

ssl_certificate /etc/letsencrypt/live/example.com/cert.pem;

ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

location / {

root /var/www/html;

}

...

}

...

}


问题与解答

在证书获取与更新时,为何使用 standalone 而不是 webroot 模式?

Let's Encrypt 提供了多种身份验证方式。与 standalone 相比,webroot 模式最大的优势在于没有宕机时间。然而 webroot 存在一些隐含的问题,它们是新手不易解决的。例如,webroot 需要在 nginx.conf 中添加特殊的规则以允许外界访问,但即便如此,该路径依旧被部分防火墙封杀。此外,启用了 301 跳转的服务器无法直接使用 webroot 更新证书,这期间需要反复修改配置文件,比 standalone 模式更为繁琐。十几秒的宕机时间对一般的网站来说可以忽略不计,因此我建议新手优先使用 standalone 模式。

如何发现占用某个端口的进程?

下面的指令可以列出占用每个 TCP 端口的进程。

sudo netstat -ntlp

找到进程号之后可以用 kill -9 强制关闭程序。

如何使用文字图形界面?

文字图形界面的操作非常简单。tab 键用于切换光标所在区域,space 键勾选或取消选项,enter 键确定,ctrl-c(强制)退出。

server{
	listen 80;
 server_name xcx.xlelou.cc;
	 return 301 https://xcx.xlelou.cc$request_uri;
 location / {

 }
}

### redirects http requests to https
### the https server
server {
 # listen on ssl, deliver with speedy if possible
 listen 443 ssl spdy;
 server_name xcx.xlelou.cc;
 # change these paths!
 ssl_certificate /etc/letsencrypt/live/xcx.xlelou.cc/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/xcx.xlelou.cc/privkey.pem;
 # enables all versions of TLS, but not SSLv2 or 3 which are weak and now deprecated.
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 # disables all weak ciphers
	ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4";
 ssl_prefer_server_ciphers on;
 location / {
	alias /home/xcx/ ;
 }
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表