前一篇关于apache配置https的文章可能写的太简略了,传送门,本文算是一个“教程”啦,给那些需要配置ssl的人,可以少走一些弯路

未配置https之前Apache虚拟主机配置文件详解:

在我配置wangchenyu.net.cn的https之前所有的apache配置文件看起来都是理所当然的:

<VirtualHost x.x.x.x:80> #监听这个ip来的80端口
ServerAdmin admin@wangchenyu.net.cn #站长邮箱
DocumentRoot "/xxx/xxx/www.wangchenyu.net.cn" #网站目录
ServerName www.wangchenyu.net.cn #域名绑定 只能写一个
ServerAlias wangchenyu.net.cn a.wangchenyu.net.cn #除了主域名外绑定的其他域名都列在这
ErrorLog "/xxx/www.wangchenyu.net.cn_error_apache.log" #错误日志位置
CustomLog "/x/www.wangchenyu.net.cn_apache.log" common #访问日志位置
<Directory "/x/www.wangchenyu.net.cn"> #目录权限设定
SetOutputFilter DEFLATE #插入过滤器
Options -Indexes #当前目录特性 ExecCGI即在该目录下允许执行CGI脚本 FollowSymLinks允许链接到别的文件 Indexes允许列出目录(-Indexes就是不允许)
Require all granted #在apache2.4中使用这一句来确保所有人都能打开你的网站
AllowOverride All #允许所有目录使用.htaccess文件
#Order allow,deny #这一行和下一行在一起出现是apache2.2中确保所有人都能打开你的网站,我使用2.4但是大多数人还是用着2.2因此网上很多教程还是会把这两行写上
#Allow from all #
DirectoryIndex index.html index.php #默认首页
</Directory>
</VirtualHost>

如果你只是看某个教程然后复制了一个apache的配置文件就要小心了,仔细检查检查Options选项或者别的选项有没有不安全因素。有些甚至还直接写了一些Rewrite规则在里面。

配置了https的apache虚拟主机配置文件详解:

这里有几点是https血的教训:

  1. ServerName处写的主域名后面必须加:443
  2. 开头的<VirtualHost x.x.x.x:443>处x.x.x.x要写明ip,不要用通配符*
  3. ServerAlias还是放除了主域名外别的域名,但是不要加:443
  4. 在SSL Engine部分,apache 2.2不支持在配置文件里面指定SSLCompression
  5. SSL引擎的那些关于 允许的算法套件、是否强制使用指定的算法套件顺序来验证我是参考了mozilla基金会关于服务器端ssl的安全配置建议:https://wiki.mozilla.org/Security/Server_Side_TLS 如果有耐心也推荐你看一下,
  6. 不要直接百度一个教程就按照他说的把他给的ssl配置的部分拷贝下来。实践证明那些没有一个能在我这上面跑起来。
<VirtualHost x.x.x.x:443>  # 下面是一些通用设置,详解见上面
DocumentRoot "/xxx/wangchenyu.net.cn"
ServerName wangchenyu.net.cn:443 #注意保留443
ServerAlias www.wangchenyu.net.cn x.wangchenyu.net.cn #注意没有443
ServerAdmin admin@wangchenyu.net.cn
DirectoryIndex index.html index.php
ErrorLog "/xxxl.log"
TransferLog "/xxxnsfer.log"
# 开启SSL引擎并进行配置
SSLEngine on #开启ssl
SSLCertificateKeyFile /xxx/sssl/www.wangchenyu.net.cn.key #指定私钥位置 即你的域名.key
SSLCertificateFile /xxx/sssl/www.wangchenyu.net.cn.crt #指定证书位置 即你的域名.crt
SSLCertificateChainFile /xxx/sssl/root_bundle.crt #指定证书颁发者的根证书位置 即一般都有一个root_bundle.crt
SSLProtocol all -SSLv2 -SSLv3 #指定允许哪些版本的SSL协议
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA #允许客户端使用哪些加密算法套件
SSLHonorCipherOrder on #是否强制使用服务器指定的算法套件顺序来验证
SSLCompression off #是否压缩
<Directory "/x/www.itmanbu.com">
SetOutputFilter DEFLATE
Options -Indexes
AllowOverride All
DirectoryIndex forum.php
Require all granted
</Directory>
 BrowserMatch ".*MSIE.*"    #针对IE浏览器的特殊设置
 nokeepalive ssl-unclean-shutdown 
 downgrade-1.0 force-response-1.0
</VirtualHost>

如果你用的oneinstack,那么默认安装好的apache2.4是加载了ssl模块但是在配置文件里面没有开启ssl,需要略微改动,在这里我懒,大家自行百度就能解决那些问题,等我遇到了就补回来。