龙空技术网

ubuntu,添加并使用https

真知见闻 307

前言:

而今我们对“ubuntu启用https”都比较着重,姐妹们都想要知道一些“ubuntu启用https”的相关资讯。那么小编在网络上汇集了一些关于“ubuntu启用https””的相关文章,希望朋友们能喜欢,朋友们快快来了解一下吧!

以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 ; location / { root /var/www/html; } ... } ...}

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

http { server { listen 80;  listen [::]:80; server_name example.com ; location / { root /var/www/html; } ... } server { listen 443 ssl; server_name 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# 启动 Nginxsudo service nginx start

进阶:HTTPS 跳转

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

http {

server {

listen 80;

listen [::]:80;

server_name example.com ;

return 301 ;

}

server {

listen 443 ssl;

server_name 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 ; location / { }}### redirects http requests to https### the https serverserver { # 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/ ; }}

标签: #ubuntu启用https