centos给apache配置https
给自己的博客用上了 https,使用免费的Let's Encrypt提供的https服务,使用certbot工具来配置,这里我们使用它的手动配置来给apache配置https的支持。
安装certbot
$ sudo yum install epel-release
$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto
$ ./certbot-auto
它会在 /etc/letsencrypt
下生成一些文件,证书文件存放于 /etc/letsencrypt/live/dragonballsoft.cn
文件夹内。
手动生成证书
接下来手动生成证书,通过配置文件来生成证书。先建立配置文件:
$ sudo mkdir /etc/letsencrypt/config
$ sudo vim /etc/letsencrypt/config/dragonballsoft.cn.config
在 example.com.config
文件里写入:
# 写你的域名和邮箱,多个域名用逗号分隔
domains=dragonballsoft.cn, www.dragonballsoft.cn, other.example.com
rsa-key-size=2048
[email protected]
text=True
authenticator=webroot
webroot-path=/var/www/html
这里需要解释一下,上面配置文件用了 webroot 的验证方法,这种方法适用于已经有一个 Web Server 运行中的情况。certbot 会自动在
/var/www/example
下面创建一个隐藏文件.well-known/acme-challenge
,通过请求这个文件来验证 example.com 确实属于你。外网服务器访问http://www.example.com/.well-known/acme-challenge
,如果访问成功则验证OK。
生成证书:
$ ./certbot-auto -c /etc/letsencrypt/config/dragonballsoft.cn.conf certonly
之后就会在 /etc/letsencrypt/live/dragonballsoft.cn
文件夹里生成对应的文件
配置apache
接下来就是配置apache了,对于不同的web服务器,如apache,ngnix等配置ssl可以查看Mozilla SSL Configuration Generator。
在 /etc/httpd/conf/httpd.conf
文件末尾加上:
Listen 443 #监听443,https协议端口
NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName www.dragonballsoft.cn
ServerAlias dragonballsoft.cn
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/dragonballsoft.cn/fullchain.pem
SSLCertificateChainFile /etc/letsencrypt/live/dragonballsoft.cn/chain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dragonballsoft.cn/privkey.pem
Header always set Strict-Transport-Security "max-age=15768000" #为了让游览器强制使用https协议,拒绝使用http
</VirtualHost>
如果想http跳转到https,可以加入:
<VirtualHost *:80>
ServerName www.dragonballsoft.cn
ServerAlias dragonballsoft.cn
RewriteEngine on
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
</VirtualHost>
ServerAlias dragonballsoft.cn
这个要加,否则当去验证 http://dragonballsoft.cn/.well-known/acme-challenge/xxxx
的时候会访问不到
别忘记在 httpd.conf
加上 mod_ssl.so
模块的加载:
LoadModule ssl_module modules/mod_ssl.so
为了更好的可以加入:
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128 -GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE- ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES2 56-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES 256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:A ES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
SSLOptions +StrictRequire
然后重启apache就可以通过 https://www.dragonballsoft.cn
访问了:
$ sudo service httpd restart
自动化定期更新证书
Let's Encrypt的证书有效期为3各月,因此要定时更新证书,可以使用crontab定时去更新。
先测试一下能否更新:
$ ./certbot-auto renew --dry-run
如果执行成功说明可以正常更新,然后在crontab里加入:
* 0,12 * * * /home/jack/certbot-auto renew --quiet
用专业在线工具测试你的服务器 SSL 安全性
Qualys SSL Labs 提供了全面的 SSL 安全性测试,填写你的网站域名,给自己的 HTTPS 配置打个分。
如果你完全按照我上面教程配置,遵循了最佳实践,你应该和我一样得分是 A+
这意味着你启用了HTTPS,现在足够的安全,并且使用了最新技术,保证了性能。
绑定多个域名
如果有个子域名也要使用同样的证书,但是和主域名网站目录不一样,可以使用apache的alais,在子域名的配置里加上:
<VirtualHost *:80>
ServerName subdomain.dragonballsoft.cn
alias /.well-known/ "/var/www/subdomain/.well-known/"
</VirtualHost>