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=example@example.com
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。

—— 摘自:https://ksmx.me/letsencrypt-ssl-https/

生成证书:

$ ./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,现在足够的安全,并且使用了最新技术,保证了性能。

—— 摘自 https://ksmx.me/letsencrypt-ssl-https/

绑定多个域名

如果有个子域名也要使用同样的证书,但是和主域名网站目录不一样,可以使用apache的alais,在子域名的配置里加上:

<VirtualHost *:80>
ServerName subdomain.dragonballsoft.cn
alias /.well-known/ "/var/www/subdomain/.well-known/"
</VirtualHost>