使用Stunnel为MySQL Server建立SSL隧道

笔者接手的一个项目有如下需求:

两台主机A和B,A上运行一个MySQL服务器和一套基于PHP的、以MySQL为数据库的CMS;B上除MySQL服务器外,其他皆与A相同。

要求B能安全地(通过SSL)连接A上的MySQL服务器,而这个CMS本身不支持MySQL over SSL

Stunnel可以提供一个安全的SSL隧道,理论上可以承载任何应用层协议——包括MySQL。

以下操作在A和B上执行

OpenSSL的目录需根据实际情况设置,Stunnel最高支持OpenSSL 1.1.1-dev

tar zxvf stunnel-5.44.tar.gz  
cd stunnel-5.44/

#编译安装至/opt/stunnel,配置文件存放于/etc/stunnel
./configure --prefix= --exec-prefix=/opt/stunnel --with-ssl=/opt/openssl-1.1.0g LDFLAGS="-Wl,--rpath=/opt/openssl-1.1.0g/lib -L/opt/openssl-1.1.0g/lib -lssl -lcrypto"
make  
make install  

建立systemd service文件/lib/systemd/system/stunnel.service,内容如下:

[Unit]
Description=SSL tunnel daemons  
After=network.target  
After=syslog.target

[Install]
WantedBy=multi-user.target  
Alias=stunnel.target

[Service]
Type=forking  
ExecStart=/opt/stunnel/bin/stunnel /etc/stunnel/stunnel.conf  
ExecStop=/bin/kill -TERM $MAINPID  
ExecReload=/bin/kill -USR1 $MAINPID

# Give up if ping don't get an answer
TimeoutSec=600

Restart=always  
PrivateTmp=false  

执行systemctl daemon-reload令更改生效

编辑A机(服务器端)的stunnel配置文件(/etc/stunnel/stunnel.conf,下同)

pid = /var/run/stunnel4/stunnel4.pid  
#只允许使用AES-GCM且具有前向安全性的加密套件
ciphers = ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256  
#只允许使用TLS 1.2
options = NO_SSLv2  
options = NO_SSLv3  
options = NO_TLSv1  
options = NO_TLSv1.1

options = CIPHER_SERVER_PREFERENCE  
options = DONT_INSERT_EMPTY_FRAGMENTS  
renegotiation = no

[mysql]
#SSL证书与私钥
cert = /path/to/cert_with_intermediate_CA.cer  
key = /path/to/private_key.key  
#SSL监听端口
accept  = 6033  
#MySQL监听地址及端口
connect = 127.0.0.1:3306  

编辑B机的Stunnel配置文件

pid = /var/run/stunnel4/stunnel4.pid

[mysql]
#本地(明文)监听端口
accept  = 127.0.0.1:3306  
#远程(SSL)地址及端口
connect = {A_IP_ADDR}:6033  
#使用客户端模式
client = yes  

编辑完后,A机和B机分别执行systemctl restart stunnel4.service以重启Stunnel

测试:

在B机执行openssl sclient -crlf -connect {AIP_ADDR}:6033,若出现类似如下报文,则A机配置无问题。

j  
5.5.5-10.0.31-MariaDB-0ubuntu0.16.04.2?J%wLÿ? UD6!Clu)iWY9mysql_native_password  

可以在命令后添加-ssl3|-tls1|-tls1_1以测试是否确实禁用低版本SSL协议。

在B机执行telnet 127.0.0.1 3306,若返回类似报文,则B机配置也无问题。

此时,B机上的PHP程序,数据库连接部分保持与A机上的相同即可。

Nginx SSL安全性增强,HTTPS网站轻松快速获得A+评级

从 HTTP 到 HTTPS 只需要一个SSL证书,而在安装 SSL 证书后,如何在 Qualys SSL Labs 网站获得更高的安全评级呢?该如何增强 SSL 安全性呢?

未分类

子凡下面就通过对 Nginx 服务器设置的 SSL 安全机制与大家做个简单的分享,还记得之前子凡分享过 HSTS 安全协议配置,可以简单从 HTTP 到 HTTPS 的安全高效转移,而今天给大家说的有共同之处,也更为全面。

未分类

通过禁用 SSL 压缩来降低 CRIME 攻击威胁;禁用协议上存在安全缺陷的 SSLv3 及更低版本,并设置更健壮的加密套件cipher suite来尽可能启用前向安全性Forward Secrecy;此外还启用了 HSTS 和 HPKP。这样我们就拥有了一个健壮而可经受考验的 SSL 配置,并可以在 Qually Labs 的 SSL 测试中得到 A 级及以上评分。

#Nginx SSL安全性增强
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";

以上便是子凡目前在用的一个简单配置,通过在原有的服务器配置文件中添加以上信息就瞬间从之前的A-评价获得了A+,实现了 Nginx 服务器的 SSL 安全性增强配置。

同样我们还可以通过 https://cipherli.st 找到 Apache 和 Lighttpd 的安全设置,同样也有 Nginx 的安全设置,只是可能与以上子凡提供的有所区别,将其复制粘帖到服务器相关的配置文件中保存即可。

最后配置好后,我们便可通过 https://www.ssllabs.com/ssltest 进行评级测试。

CentOS 7上Apache配置SSL证书

未分类

Certbot配置SSL证书

Certbot是让vultr加密认证中心的自动SSL证书颁发者。它被开发为让vps加密的客户端,并且还将与支持ACME协议的任何其他CA协同工作。

接下来将介绍在CentOS 7上的Apache安装Certbot的过程,并配置它发布和续订我们加密SSL证书。

1. 安装

Certbot在EPEL Yum Repository上可用。如果没有安装EPEL,可以使用以下命令安装:

# yum -y install epel-release mod_ssl openssl

接下来,我们将需要安装Certbot及其Apache插件

# yum -y install certbot python-certbot-apache

运行Certbot:

# certbot --apache

为了避免错误,请确保已为希望使用SSL证书的域和DNS配置正确的域设置了虚拟主机。(像我一样,略过)

运行Certbot Apache Plugin后,会出现一个安装向导。可配置选项包括邮箱,域名,订阅,看不懂英文的可复制到Google翻译,以免出错。

  • 选择要颁发证书的域名(注意:www.example.com和example.com将分发SSL证书)。
  • SSL强制选项。

本站配置ssl时没有输入通配符www,如果加入www访问,会提示https不安全 https://www.toavoid.cc,不加www即可。
当然你也可以选择输入www如www.toavoid.cc,配置ssl完毕之后在后台设置为域名加上www即可。已加上的略过。

2. 自动续订

加密证书90天后过期。Certbot可以轻松处理自动续订。

# certbot renew --dry-run

# certbot renew --quiet

现在打开网站发现https已经生效

未分类

如果出现不安全,确认是否在后台设置域名通配符,我这里没设置~

未分类

Ubuntu 16.04 配置 Let’s Encrypt 实现站点 SSL

Let’s Encrypt 的服务相信很多人都知道了,我个人认为这是最好的免费 SSL 服务。下面内容即使如何在自己的网站上使用 Let’s Encrypt 实现 SSL.

前提条件

  • 自己拥有一个域名,备案了的域名最好。

  • Ubuntu 16.04 的服务器,你可以到腾讯云或者阿里云购买这样的云主机。

  • 将域名自己解析到你的 Ubuntu 16.04 的云主机 ip;注意如果你的域名没备案,在购买主机的时候,推荐大家购买腾讯云或者阿里云境外的主机。

1. 安装 Certbot

Certbot 其实就是维护 Let’s Encrypt 的 Package,在 Ubuntu 16.04 上,我们可以这样安装:

首先安装 Nginx:

sudo apt-get install nginx

以上过程,等待安装完毕就好。

然后添加 package repository

sudo add-apt-repository ppa:certbot/certbot

这个过程中,等待验证完毕,按下 ENTER 就好。然后更新 apt 源数据:

sudo apt-get update

最后,安装 Certbot 的 Nginx package:

sudo apt-get install python-certbot-nginx

2. 配置 Nginx

安装完 Nginx 和 Certbot 之后,需要简单配置 Nginx 以便于 Let’s Encrypt 能起作用:

sudo vi /etc/nginx/sites-available/default

使用 vi 编辑器打开 /etc/nginx/sites-available/default,可以直接删除里面的所有内容,然后再添加下面的配置:

server {
    listen 80;
    listen [::]:80;
    server_name your-domain.com www.your-domain.com;
}

注意这里的 your-domain.com 换成你自己的域名。

保存退出之后,执行以下命令来检测 Nginx 的配置文件是否有错:

sudo nginx -t

如果出现类似 syntax ok 这样的语句,就说明 Nginx 的配置文件没有问题。之后就是重新加载 Nginx 的配置文件了:

sudo service nginx reload

3. 签发 SSL 证书

前面的两大步配置完成,就可以使用 Let’s Encrypt 签发 SSL 证书了:

sudo certbot --nginx -d your-domian.com -d www.your-domain.com

注意这里的 your-domain.com 换成你自己的域名。

如果你第一次运行 certbot 命令的话,你需要在弹出的窗口输入你的邮箱地址还有需要接受 Let’s Encrypt 的协议,这样之后,你大概会看到下面的文字:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

在上面这里选择 1 或者 2,我推荐大家直接选择 2,因为这个会直接将你的 nginx 文件配置好并且是会将 http 跳转到 https 的。

选择完毕之后,等待 SSL 生成完毕,就会有类似这样的输出:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/your-domain.com/fullchain.pem. Your cert will
   expire on 2017-12-29. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot again with the
   "certonly" option. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

然后在上面的文字中,这个 /etc/letsencrypt/live/your-domain.com/fullchain.pem 路径很重要,就是你的 SSL 证书路径。

其实到这里,访问 your-domain.com 应该就可以看到 https 的效果了。

4. 自动更新证书

因为 Let’s Encrypt 签发的 SSL 证书有效期只有 90 天,所有在过期之前,我们需要自动更新 SSL 证书,而如果你使用最新的 certbot 的话,Let’s Encrypt 会帮你添加自动更新的脚本到 /etc/cron.d 里,你只需要去检测一下这个命令是否生效就OK!

sudo certbot renew --dry-run

如果这个命令你没看到什么 error 的话,那就是没什么问题了。

5. 总结

本文主要是介绍了在 Ubuntu 16.04 的云服务器上,使用 Nginx 作为服务器软件情况下,如何配置 Let’s Encrypt 的 SSL 证书,使得网站得以支持 https 的过程。内容很浅,但是我觉得还是挺有用的。

mysql通过ssl的方式生成秘钥具体生成步骤

— mysql ssl 生成秘钥

1、check ssl是否已经开启

mysql> show variables like '%ssl%'; 

+---------------+----------+ 

| Variable_name | Value | 

+---------------+----------+ 

| have_openssl | DISABLED | 

| have_ssl | DISABLED | 

| ssl_ca | | 

| ssl_capath | | 

| ssl_cert | | 

| ssl_cipher | | 

| ssl_crl | | 

| ssl_crlpath | | 

| ssl_key | | 

+---------------+----------+ 

9 rows in set (0.00 sec) 

2、没有开启,所以打开

在my.cnf末尾端设置ssl 参数, 然后重新启动mysql服务即可

mysql> show variables like '%ssl%'; 

+---------------+-------+ 

| Variable_name | Value | 

+---------------+-------+ 

| have_openssl | YES | 

| have_ssl | YES | 

| ssl_ca | | 

| ssl_capath | | 

| ssl_cert | | 

| ssl_cipher | | 

| ssl_crl | | 

| ssl_crlpath | | 

| ssl_key | | 

+---------------+-------+ 

9 rows in set (0.00 sec) 

3、通过openssl生成证书的配置, 在mysql db server上生成秘钥

mkdir -p /etc/mysql/newcerts/ 

cd /etc/mysql/newcerts/ 

3.1 openssl genrsa 2048 > ca-key.pem

3.2 openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

[root@mysql newcerts]# openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem 

You are about to be asked to enter information that will be incorporated 

into your certificate request. 

What you are about to enter is what is called a Distinguished Name or a DN. 

There are quite a few fields but you can leave some blank 

For some fields there will be a default value, 

If you enter '.', the field will be left blank. 

----- 

Country Name (2 letter code) [XX]:ch 

State or Province Name (full name) []:shh 

Locality Name (eg, city) [Default City]:shh 

Organization Name (eg, company) [Default Company Ltd]:xx 

Organizational Unit Name (eg, section) []:db 

Common Name (eg, your name or your server''s hostname) []:mysql.yest.nos 

Email Address []:xx@xx.com 

3.3 openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

[root@mysql newcerts]# openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem 

Generating a 2048 bit RSA private key 

.......................................................................................................+++ 

..........................................................+++ 

writing new private key to 'server-key.pem' 

----- 

You are about to be asked to enter information that will be incorporated 

into your certificate request. 

What you are about to enter is what is called a Distinguished Name or a DN. 

There are quite a few fields but you can leave some blank 

For some fields there will be a default value, 

If you enter '.', the field will be left blank. 

----- 

Country Name (2 letter code) [XX]:ch 

State or Province Name (full name) []:shh 

Locality Name (eg, city) [Default City]:ssh 

Organization Name (eg, company) [Default Company Ltd]:xx 

Organizational Unit Name (eg, section) []:db 

Common Name (eg, your name or your server''s hostname) []:mysql.yest.nos 

Email Address []:xx@xx.com 

Please enter the following 'extra' attributes 

to be sent with your certificate request 

A challenge password []:820923 

An optional company name []:xx 

4、在mysql db server客户端生成ssl文件

4.1 openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

[root@mysql newcerts]# openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem 

Signature ok 

subject=/C=ch/ST=shh/L=ssh/O=ea/OU=db/CN=mysql.yest.nos/emailAddress=cm@xx.com 

Getting CA Private Key 

4.2 openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem

[root@mysql newcerts]# openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem 

Generating a 2048 bit RSA private key 

.......+++ 

........................................................+++ 

writing new private key to 'client-key.pem' 

----- 

You are about to be asked to enter information that will be incorporated 

into your certificate request. 

What you are about to enter is what is called a Distinguished Name or a DN. 

There are quite a few fields but you can leave some blank 

For some fields there will be a default value, 

If you enter '.', the field will be left blank. 

----- 

Country Name (2 letter code) [XX]:ch 

State or Province Name (full name) []:shh 

Locality Name (eg, city) [Default City]:shh 

Organization Name (eg, company) [Default Company Ltd]:xx 

Organizational Unit Name (eg, section) []:db 

Common Name (eg, your name or your server''s hostname) []:mysql.yest.nos 

Email Address []:cx@xx.com 

Please enter the following 'extra' attributes 

to be sent with your certificate request 

A challenge password []:820923 

An optional company name []:xx 

4.3 openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

[root@mysql newcerts]# openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem 

Signature ok 

subject=/C=ch/ST=shh/L=shh/O=ea/OU=db/CN=mysql.yest.nos/emailAddress=cm@xx.com 

Getting CA Private Key 

5、[]copy clent.* 3个文件到客户端机器上面/opt/mysql/ssl/去。

6、登陆验证

mysql -uxxx -pxxxx --ssl-ca=/opt/mysql/ssl/ca-cert.pem --ssl-cert=/opt/mysql/ssl/server-cert.pem --ssl-key=/opt/mysql/ssl/server-key.pem 

Nginx申请并部署SSL证书 强制 301 重定向到 HTTPS

通常在网银、购物网站上登录的时候我们会看到地址栏显示一把绿色的锁,这表明我们正在通过 HTTPS 进行加密连接。

在这个 HTTPS Everywhere 的年代,百度、360 导航等网站为了防劫持也是纷纷全面开启了强制 HTTPS。Google 之前曾有承诺会给予 HTTPS 网站一定的权重增加,其 Search Console 也提供了良好的 HTTPS 支持。国内搜索引擎也渐渐跟上,尤其是百度站长平台还提供了 HTTPS 认证和 HTTPS 退场功能,可以一键快速无痛转换。再有,优酷站外 也提供了 HTTPS 的支持,可以说目前网上大部分主流资源都可以找到其对应 HTTPS 的形式,HTTPS 已经是势不可挡的潮流。

个人认为,凡是涉及到用户登录、会员注册、账号密码的网站服务都可以上 HTTPS,目前来说转换成本也不高,毕竟是真的已经到了 HTTPS Everywhere 的时代。

申请 SSL 证书

其实目前来说国内的 SSL 证书提供商已经快倒完了。360 旗下的沃通和 Startcom 因为发假证书和隐瞒收购的问题早在去年就被警告过,而且就在上个星期,火狐称准备完全取消对沃通、Startcom 和 CNNIC 的信任,也就是说,所有使用这些证书的网站都会报错,Google 和火狐都督促使用以上证书的网站立即更换证书。

个人建议可以使用阿里云或者腾讯云(下图)的 DV 证书,只需要验证域名所有权,目前可以免费申请免费续费,另外还有非常便宜的 Comodo PositiveSSL,单年 9 美元。

Nginx

  • 域名型 SSL 证书(DV SSL):信任等级普通,只需验证网站的真实性便可颁发证书保护网站;
  • 企业型 SSL 证书(OV SSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;
  • 增强型 SSL 证书(EV SSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏。

部署 SSL 证书

1、下载对应证书版本

Apache / IIS / Nginx 都有对应的证书版本,这里 LNMP 是下载 Nginx 版,解压以后可以看到一个 .key 文件和 .crt/.pem 文件

Nginx

2、上传证书

把上面的 .key 文件和 .crt/.pem 文件上传到 /root 目录中,命名为 ssl.crt/ssl.pem 和 ssl.key,或者其他你想要的名字都可以。

3、配置部署

LNMP 一键安装包的 Nginx 配置在 /usr/local/nginx/conf/vhost/ 目录中,找到对应站点域名的配置文件(如 best66.me.conf)。普通安装的 Nginx 配置文件在 /etc/nginx/nginx.conf。vi 命令进入修改。

将其修改为(以下属性中 ssl 开头的属性与证书配置有直接关系,其它属性请结合自己的实际情况复制或调整,以下是以阿里云的证书为例):

server {
    listen 443;
    server_name best66.me www.best66.me;
    ssl on;
    root html;
    index index.html index.htm;
        ssl_certificate /root/ssl.pem;
        ssl_certificate_key /root/ssl.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
    location / {
        root html;
        index index.html index.htm;
    }
}

如果想要强制 HTTPS,请做如下修改:

server
{
    listen 80;
    server_name best66.me www.best66.me; # 修改为你的域名
    rewrite ^/(.*) https://best66.me/$1 permanent; # 如果你的网站是带 www 的,请在域名前添加 www
}
server
{
    listen 443;
    # ...... 其余配置同上
}

Nginx

以上就搞定咯。

安装Letsencrypt创建免费SSL证书

Let’s Encrypt是由Internet安全研究组(ISRG)管理的SSL证书颁发机构。 它利用自动证书管理环境(ACME)自动部署几乎被所有主流浏览器信任的免费SSL证书。
本教程将涵盖以下内容:
安装Letsencrypt ACME客户端。
获取Letsencrypt证书。
需要注意和维护的事项。
关于Let’s Encrypt及其颁发的证书的技术细节。

下载和安装Let’s Encrypt

1.安装git
CentOS

  1. sudo yum install git

Debian / Ubuntu

  1. sudo apt-get install git

2.从官方的GitHub存储库下载Let’s Encrypt。 /opt是第三方软件包的公共安装目录,所以让我们将安装到/opt/letsencrypt:

  1. sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

3.切换到/opt/letsencrypt目录

  1. cd /opt/letsencrypt

创建SSL证书

Let’s Encrypt使用一系列验证来自动完成域名验证(DV)。 证书颁发机构(CA)通过一些方法来验证计算机域的真实性。 一旦您的服务器验证通过,CA将颁发SSL证书给您。
1.使用–standalone参数运行Let’s Encrypt。 对于需要证书的每个其他域名,请将-d example.com添加到命令的末尾。

  1. sudo -H ./letsencrypt-auto certonly –standalone -d example.com -d www.example.com

注意:
Let’s Encrypt不部署通配符证书。 每个子域都需要自己的证书。
2.指定管理电子邮件地址。 这为了让您能重新获得丢失证书的控制权,并在必要时接收紧急安全通知。 按TAB,然后按ENTER或RETURN保存。
3.同意服务条款。
4.如果一切正常,将出现类似下面的消息。 它的输出意味着Let’s Encrypt已经批准并颁发了您的证书。

IMPORTANT NOTES:
– If you lose your account credentials, you can recover them through
e-mails sent to somebody@example.com.
– Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-03-31. To obtain a new version of the
certificate in the future, simply run Let’s Encrypt again.
– Your account credentials have been saved in your Let’s Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let’s
Encrypt, so making regular backups of this folder is ideal.
– If you like Let’s Encrypt, please consider supporting our work by:

Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Let’s Encrypt证书目录结构

1.列出/etc/letsencrypt/live目录:

  1. sudo ls /etc/letsencrypt/live

2.在创建SSL证书单节的步骤1中指定的各个域名都有自己的目录。 列出以下任意域名目录:

  1. sudo ls /etc/letsencrypt/live/example.com

输出:
cert.pem
chain.pem
fullchain.pem
privkey.pem
3.每个key(.pem)文件有不同的用途:
cert.pem:唯一的服务器证书。
chain.pem:根和中间证书。
fullchain.pem:服务器,根和中间证书的组合(替代cert.pem和chain.pem)。
privkey.pem:私有密钥(不要与任何人分享这个!)。
Let’s Encrypt从中间证书颁发机构颁发证书。 中间证书已由Identrust交叉签名,确保最终证书与所有主要浏览器之间的兼容性。 有关详细信息,请参阅Let’s Encrypt的官网。
4.显示fullchain.pem的文件状态:

  1. sudo stat /etc/letsencrypt/live/example.com/fullchain.pem

输出:

  1. File: ‘live/example.com/cert.pem’ -> ‘../../archive/example.com/cert1.pem’

注意这个文件指向了一个不同的文件,就像步骤3中列出的四个文件一样。它们是软链接,链接到/etc/letsencrypt/archive目录中的证书文件。
5.如果您忘记续订域名证书,Let’s Encrypt将删除/etc/letsencrypt/live中对应的目录(和软链接)。 但是,目录(和软链接)将保留在/etc/letsencrypt/archive和/etc/letsencrypt/keys目录中,以供需要时查看。

维护

续订SSL证书

1.回到cd /opt/letsencrypt目录

  1. cd /opt/letsencrypt

2.执行您在创建SSL证书的步骤1中使用的命令,添加–renew-by-default参数:

  1. sudo -H ./letsencrypt-auto certonly –standalone –renew-by-default -d example.com -d www.example.com

3.片刻之后,将出现以下内容:
IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-03-31. To obtain a new version of the
certificate in the future, simply run Let’s Encrypt again.
– If you like Let’s Encrypt, please consider supporting our work by:

Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

自动续订SSL证书(可选)

我们建议您设置自动更新证书,因为很忘记到期日期,尤其是如果您拥有多个不同的域名。 为了避免此问题,并可以使用cron来自动续订证书。
1.在我们执行下面的命令之前,让我们将其分解,并进行一些修改:

  1. echo ‘@monthly root /opt/letsencrypt/letsencrypt-auto certonly –standalone –renew-by-default -d example.com -d www.example.com >> /var/log/letsencrypt/letsencrypt-auto-update.log’ | sudo tee –append /etc/crontab

@monthly:为了简单起见,此命令将在每月的第一天的午夜执行
root:以root用户身份运行命令
/opt/letsencrypt/letsencrypt-auto certonly -standalone -renew-by-default -d example.com -d www.example.com:letsencrypt-auto更新命令。
»/var/log/letsencrypt/letsencrypt-auto-update.log:将标准输出和标准错误记录到名为letsencrypt-auto-update.log的日志文件
tee -append /etc/crontab:将新的cron作业保存到/etc/crontab文件
2.执行您修改的命令以将cron作业添加到您的服务器。

更新Let’s Encrypt

1.回到/opt/letsencrypt目录

  1. cd /opt/letsencrypt

2.从你上次下载Let’s Encrypt的仓库拉取对Let’s Encrypt所做的任何更改:

  1. sudo git pull