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运行如下命令。
请务必修改命令中的:
- 邮箱
- 服务器路径
- 网站域名
单域名单目录,生成一个证书:
./certbot-auto certonly --email [email protected] --agree-tos --no-eff-email --webroot -w /home/admin/web/chenweiliang.com/public_html -d www.chenweiliang.com
多域名单目录,生成一个证书:(即多个域名,单个目录,使用同一个证书)
./certbot-auto certonly --email [email protected] --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 [email protected] --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 [email protected] //邮箱 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中,它将出现在以下情况 ▼
- [L]表示当前规则是最后一条规则,停止分析后面重写规则。
- 因此在访问重定向的文章页面时,[L]停止了后面的规则,所以重定向规则不能起作用。
访问http主页时,我们希望触发网址重定向,跳过伪静态规则以执行重定向跳转规则,以便可以实现全站 http 重定向到 https 。
不要将https重定向规则放在 [L] 规则的下面,要放在 [L] 规则上面 ▼
扩展阅读:
- http vs https 区别是什么?SSL加密过程详解
- CWP控制面板安装Let's Encrypt加密SSL证书后出现错误500怎么办?
- 不带www顶级域名自动跳转访问二级域名:根域名301重定向www
希望陈沩亮博客( https://www.chenweiliang.com/ ) 分享的《Let’s Encrypt怎么申请?让我们加密SSL免费证书原理&安装教程》,对您有帮助。
欢迎分享本文链接:https://www.chenweiliang.com/cwl-512.html
喜欢就分享和按赞!您的分享和按赞,是我们持续的动力!