LAMP网站升级https折腾笔记

2018-08-12 15:45:00
admin
原创
463

基本概念:

HTTP: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准,用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

谷歌、火狐等浏览器厂商也已经扛起HTTPS大旗,对于HTTP站点会提示不安全警告。而且像谷歌、百度等搜索引擎也早已相应HTTPS号召,都声称对HTTPS站点页面友好甚至优先抓取,排名靠前,当然具体实际实施情况就另当别论了。

要让互联网站点都升级到HTTPS协议还需一段时间,但不可否认HTTPS是大势所趋。已过一番折腾,终于将站点升级到https访问。

下图是在部署https之前使用HTTP协议访问效果:

http访问.png

网站环境:

操作系统:centos6.5 x64

web服务:Apache 2.4+ 

免费证书商家:Let's Encrypt SSL

(参考网络上的教程时,一定要注意环境,我就踩了这个坑。)

操作流程:

1.安装证书

我使用的是Let's Encrypt SSL免费证书,有效期3个月,需要定期更新。( 更多国内外免费SSL证书推荐参考

下载certbot,并设置权限:

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

使用certbot申请安装证书:

./certbot-auto certonly --webroot --apache -w /data/wwwroot/www.chanzhicms.com -d www.chanzhicms.com

 -w后面是网站的根目录路径,-d后面是申请证书的域名,多个域名的话,在后面继续添加设置多个-d即可。

获取证书.png

申请成功后,可以查看到SSL证书的有效截止日期。申请的证书默认存放在 /etc/letsencrypt 目录下。

证书.png

2.修改Apache配置文件

设置apache的配置文件 /usr/local/apache/conf/httpd.conf,要修改两个地方,找到下面两行将其前面的#去掉即可。

LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf

然后修改/usr/local/apache/conf/extra/httpd-ssl.conf 文件,将里面内容清空,放入下面内容:

Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLCipherSuite EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5
SSLProxyCipherSuite EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5
SSLHonorCipherOrder on
SSLProtocol all -SSLv2 -SSLv3
SSLProxyProtocol all -SSLv2 -SSLv3
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
Mutex sysvsem default
SSLStrictSNIVHostCheck on

最后修改网站的单独配置文件,/usr/local/apache/conf/vhost/www.chanzhicm.com.conf ,原本只有80端口配置,这里需要我们加上443端口的配置:

<VirtualHost *:80>
    ServerAdmin admin@linuxeye.com
    DocumentRoot "/data/wwwroot/www.chanzhicms.com"
    ServerName www.chanzhicms.com
    ServerAlias chanzhicms.com
    ErrorLog "/data/wwwlogs/www.chanzhicms.com_error_apache.log"
    CustomLog "/data/wwwlogs/www.chanzhicms.com_apache.log" combined
<Directory "/data/wwwroot/www.chanzhicms.com">
    SetOutputFilter DEFLATE
    Options FollowSymLinks ExecCGI
    Require all granted
    AllowOverride All
    Order allow,deny
    Allow from all
    DirectoryIndex index.html index.php
</Directory>
</VirtualHost>
Listen 443
<VirtualHost *:443>
    DocumentRoot "/data/wwwroot/www.chanzhicms.com"
    ServerName www.chanzhicms.com:443
    ServerAlias www.chanzhicms.com
    ErrorLog "/data/wwwlogs/www.chanzhicms.com_error_apache.log"
    ServerAdmin admin@linuxeye.com
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/www.chanzhicms.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.chanzhicms.com/privkey.pem
    <Directory "/data/wwwroot/www.chanzhicms.com">
        SetOutputFilter DEFLATE
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
        DirectoryIndex index.html index.php
        Require all granted
    </Directory>
</VirtualHost>

上面配置中的网站名称、网站路径、证书路径等信息,大家根据自己的具体情况填写。

注意:

这里必须要特别强调一点,因为我的Apache版本是2.4+的,在Directory中,一定要加上一条 Require all granted ,否侧会出现网站HTTP访问正常,但https访问提示 403 forbidden这条命令是apache2.4新增加的,用以替代allow,deny以及order指令。

最后,重启Apache!重启Apache!重启Apache!

使用https访问网站,查看是否生效。如下图:

https访问.png


证书更新

证书快到期了,我在使用 certbot-auto renew 命令进行证书更新时,提示如下错误:

Attempting to renew cert (www.chanzhicms.com) from /etc/letsencrypt/renewal/www.chanzhicms.com.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',). Skipping.
All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/live/www.chanzhicms.com/fullchain.pem (failure)

解决方法:

1. 创建手动授权脚本,输入如下命令

vim /etc/letsencrypt/renewal/www.chanzhicms.com.sh
#!/bin/bash
echo $CERTBOT_VALIDATION > /path/to/wwwroot/.well-known/acme-challenge/$CERTBOT_TOKEN

其中,/path/to/wwwroot/ 为您域名验证的网站根目录

使脚本可执行:

chmod +x /etc/letsencrypt/renewal/www.chanzhicms.com.sh

2. 带参数执行命令

certbot-auto renew --manual-auth-hook /etc/letsencrypt/renewal/www.chanzhicms.com.sh

3.成功后,检查更新到期日期

./certbot-auto certificates

image.png

小结:

网站升级https其实并不复杂,只是一些细节问题上可能会因环境而异,所以不要盲目地仿照他人操作流程,一定要先看服务器环境。其次,因为https使用443端口,所以服务器防火墙要放开443端口访问,我用的阿里云服务器,还会涉及到安全策略设置,所以在操作时,注意检查端口是否监听。

如果大家在部署https访问网站时遇到其他问题,欢迎留言反馈,我们共同学习交流。

版权声明

版权声明:本站原创文章,转载请注明作者和出处。

本站点采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议  

评论列表
memory 2018-08-27 08:24:36 回复
不错不错。。。虽然我一直用nginx.但是这篇apache的配置ssl介绍的还是蛮详细的.
1/1
发表评论
评论通过审核后显示。
关注【程序员专区】

扫一扫,分享更多技术干货

热门文章
近期留言

魏义齐个人博客2018-10-25

博主是全栈工程师?

enen2018-10-24

真的挺好的,我也在做博客,作评论,学习一下

hahah2018-10-24

好文

易安2018-10-08

你好,能分享下你的博客模板吗?想用来做一个项目

memory2018-08-27

不错不错。。。虽然我一直用nginx.但是这篇apache的配置ssl介绍的还是蛮详细的