Let’s Encrypt怎么申请?让我们加密SSL免费证书原理&安装教程

  • A+

Let's Encrypt怎么申请?

让我们加密SSL证书原理&安装教程

SSL是什么?陈沩亮在上一篇文章《http vs https 区别是什么?SSL加密过程详解》里就有说到。

除了电子商务网站必须购买高级的加密SSL证书以外,用网站做微信公众号推广新媒体人,想要安装SSL证书,其实可以免费安装加密SSL证书,这样对SEO有帮助,能提高网站关键词在搜索引擎的排名。

Let's Encrypt(让我们加密)本身自己也写了一套流程(https://certbot.eff.org/),使用Linux的朋友,可以参考该流程的同时,跟着本教程操作。

先下载 certbot-auto 工具,然后运行工具的安装依赖组件。

wget https://dl.eff.org/certbot-auto --no-check-certificate
chmod +x ./certbot-auto
./certbot-auto -n

生成SSL证书

接下来,以陈沩亮博客域名为例,请根据自身需要修改,SSH运行如下命令。

请务必修改命令中的:

  1. 邮箱
  2. 服务器路径
  3. 网站域名

单域名单目录,生成一个证书:

./certbot-auto certonly --email youemail@qq.com --agree-tos --no-eff-email --webroot -w /home/admin/web/chenweiliang.com/public_html -d www.chenweiliang.com

多域名单目录,生成一个证书:(即多个​​域名,单个目录,使用同一个证书)

./certbot-auto certonly --email youemail@qq.com --agree-tos --no-eff-email --webroot -w /home/admin/web/chenweiliang.com/public_html -d www.chenweiliang.com -d img.chenweiliang.com

生成的SSL证书会保存在:/etc/letsencrypt/live/www.chenweiliang.com/ 目录下。


多域名多目录,生成一个证书:(即多个域名,多个目录,使用同一个证书)

./certbot-auto certonly --email youemail@qq.com --agree-tos --no-eff-email --webroot -w /home/admin/web/chenweiliang.com/public_html -d www.chenweiliang.com -d img.chenweiliang.com -w /home/eloha/public_html/site/etufo.org -d www.etufo.org -d img.etufo.org

安装 Let's Encrypt 证书成功后,SSH会出现如下提示信息:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.chenweiliang.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.chenweiliang.com/privkey.pem
Your cert will expire on 2018-02-26. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto 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

SSL证书续期

证书续期也非常方便,利用crontab进行自动续期。有些Debian没有安装crontab的可以先手动安装。

apt-get install cron

以下命令分别nginx跟apache是在 /etc/crontab 的文件中输入的命令,意思是每10天续期一次,90天的有效期足够了。

Nginx的 crontab 文件,请添加:

0 3 */10 * * /root/certbot-auto renew --renew-hook "/etc/init.d/nginx reload"

Apache 的 crontab 文件,请添加:

0 3 */10 * * /root/certbot-auto renew --renew-hook "service httpd restart"

SSL证书Apache配置

现在,我们需要对 Apache 的配置进行修改。

温馨提示:

  • 假如你是用CWP控制面板,在添加域名勾选自动生成SSL证书,就会自动给SSL证书Apache配置。
  • 若再多做以下步骤的话,重启Apache后可能会出错。
  • 如果出错,请删除你手动添加的配置。

编辑 httpd.conf 文件:
/usr/local/apache/conf/httpd.conf

查找:
Listen 443
(将前面的注释号 # 去掉)
或添加监听端口443:
Listen 443

SSH检查Apache监听端口:
grep ^Listen /usr/local/apache/conf/httpd.conf

查找:
mod_ssl
(将前面的注释号 # 去掉)
或添加:
LoadModule ssl_module modules/mod_ssl.so

查找:
httpd-ssl
(将前面的注释号 # 去掉)

然后,SSH执行以下命令(注意将路径换你自己的):

at >/usr/local/apache/conf/extra/httpd-ssl.conf<<EOF
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProxyCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLHonorCipherOrder on
SSLProtocol all -SSLv2 -SSLv3
SSLProxyProtocol all -SSLv2 -SSLv3
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
SSLMutex "file:/usr/local/apache/logs/ssl_mutex"
EOF

接着,在你创建的网站的Apache配置的最后</VirtualHost>下面。

添加上SSL部分的配置文件(注意去掉注释,还有将路径换你自己的):

<VirtualHost *:443>
DocumentRoot /home/admin/web/chenweiliang.com/public_html //网站目录
ServerName www.chenweiliang.com:443 //域名
ServerAdmin youremail@qq.com //邮箱
ErrorLog "/var/log/www.chenweiliang.com-error_log" //错误日志
CustomLog "/var/log/www.chenweiliang.com-access_log" common //访问日志
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.chenweiliang.com/fullchain.pem //之前生成的证书
SSLCertificateKeyFile /etc/letsencrypt/live/www.chenweiliang.com/privkey.pem //之前生成的密钥
<Directory "/home/admin/web/chenweiliang.com/public_html"> //网站目录
SetOutputFilter DEFLATE
Options FollowSymLinks
AllowOverride All
suPHP_UserGroup eloha eloha //用户组(有些服务器配置需要,有些可能不需要,出错请删除此行)
Order allow,deny
Allow from all
DirectoryIndex index.html index.phps
</Directory>
</VirtualHost>

最后重启Apache就可以了:

service httpd restart

Apache强制HTTP重定向HTTPS

  • 许多Web请求始终只能使用SSL运行。
  • 我们需要确保每次使用SSL时都必须通过SSL访问网站。
  • 如果任何用户尝试使用非SSL URL访问网站,他必须重定向到SSL网站。
  • 使用Apache mod_rewrite模块重定向到SSL URL。
  • 如用LAMP一键安装包,内置自动安装SSL证书和强制重定向到HTTPS,重定向HTTPS已生效,就不用再添加HTTPS重定向。

添加重定向规则

  • 在Apache的配置文件中,编辑网站的虚拟主机,并添加以下设置。
  • 您也可以在.htaccess文件中,将相同的设置添加到网站上的文档根目录中。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

如果你只想指定某个URL重定向到HTTPS:

RewriteEngine On
RewriteRule ^message$ https://www.etufo.org/message [R=301,L]
  • 如果有人试图访问 message ,该页面将跳转到https,用户只能用SSL访问URL。

重启Apache,让.htaccess文件生效:

service httpd restart

注意事项

  • 请将以上邮箱地址,改成你的邮箱地址。
  • 请记得将以上的网站域名,改成你的网站域名。

重定向规则位置问题

在伪静态规则下,放置重定向跳转规则时,通常会遇到 http 无法全站重定向到 https 的问题。

最初我们将重定向代码复制到.htaccess中,它将出现在以下情况 ▼

Let's Encrypt怎么申请?让我们加密SSL免费证书原理&安装教程

  • [L]表示当前规则是最后一条规则,停止分析后面重写规则。
  • 因此在访问重定向的文章页面时,[L]停止了后面的规则,所以重定向规则不能起作用。

访问http主页时,我们希望触发网址重定向,跳过伪静态规则以执行重定向跳转规则,以便可以实现全站 http 重定向到 https

不要将https重定向规则放在 [L] 规则的下面,要放在 [L] 规则上面 ▼

Let's Encrypt怎么申请?让我们加密SSL免费证书原理&安装教程

扩展阅读:

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: