CentOS 6.8服务器给Apache下的站点配置Let’s Encrypt 证书

我们有几个站点,之前用的wosign的免费SSL证书,最近在Chrome中查看站点,都提示是不安全的站点,应该是wosign的不佳的国际声誉连累的。
于是决定换成Let’s Encrypt证书。方法不难,参看:官方文档

有几个注意点:

如果用自动化的配置certbot-auto的话,它会自动找 /etc/httpd/conf.d 文件夹下面的站点配置文件,但只对配置文件里面仅配置了一个80端口的情况有效,如果您的一个配置文件里面配置了多个80端口的站点,则不能自动识别。另外,如果已经自行配置了ssl站点(443端口的virtualhost)的话,也不会再自动识别为需要配置的站点。

我自动化配置了两个站点,先将原来的的配置文件里面的ssl配置(443端口的virtualhost)注释掉了。然后用certbot-auto,选择了识别出来的这两个站点,然后一切自动运行,提示证书生成,且生成了新的配置文件,文件名 www.example.com-le-ssl.conf。

这时候访问网站,是一片空白,服务器端没有输出任何东西。事实证明,自动生成的这个https站点的配置还是有一些问题的:

1,没有指定DocumentRoot;

2,整个配置文件用了<IfModule mod_ssl.c></IfModule>,但其实本机的环境里面没有包含这样的文件,而mod_ssl确实是启用的,在/etc/httpd/modules/文件夹下可以看到有mod_ssl.so。因此果断注释掉了IfModule的语句(本以为也可改为IfModule nod_ssl.so,但发现不起作用),再次打开,网站成功显示,且证书确实已更新为letsencrypt证书。

CentOS+Apache环境下安装gitlab

环境:CentOS 6.8,  Apache 2.22.15

先根据官方教程,安装omnibus版本的安装包。官方源速度太慢,镜像选择了清华tuna。安装过程一路顺利。

关键是配置,gitlab默认内嵌nginx服务器,如果要使用Apache的话,需要禁用掉先,否则开机会报80端口冲突(话说这两天服务器被我重启了三四次。。。,之前170天左右稳定运行没动过)。

设置workhouse tcp连接,本机 127.0.0.1 端口8181

具体参考:

http://docs.gitlab.com/omnibus/settings/nginx.html#using-a-non-bundled-web-server

https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#using-a-non-bundled-web-server

看文档,SELinux环境下需要做一些配置,本次安装因为本机SELinux已经禁用,因此没有遇到。

参考:https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache#selinux-modifications

根据使用的gitlab版本及本机apache版本,选择一个合适的配置文件,本机参考了:

https://gitlab.com/gitlab-org/gitlab-recipes/blob/master/web-server/apache/gitlab-omnibus-apache22.conf

启动服务器,报503错误,查httpd的日志,发现Apache没有与127.0.0.1:8181连上。

如果要配置HTTPS访问,则配置文件参考:

https://gitlab.com/gitlab-org/gitlab-recipes/blob/8-1-stable/web-server/apache/gitlab-omnibus-ssl-apache22.conf

配置编辑完成后重启httpd,结果报错:

Invalid command ‘SSLCompression’, perhaps misspelled or defined by a module not included in the server

查了一下,是因为Apache版本太低(2.22.15)的原因,起码需要2.22.24。针对低版本的临时解决方案如下:

修改 /etc/sysconfig/httpd文件,添加如下语句:

export OPENSSL_NO_DEFAULT_ZLIB=1

参考:https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache#other-httpd-security-considerations

然后重启结果还是不行。—暂时没解决,谋求升级系统。

参考:

http://serverfault.com/questions/455450/how-to-disable-sslcompression-on-apache-httpd-2-2-15-defense-against-crime-bea

http://serverfault.com/questions/508520/how-to-disable-ssl-tls-compression-in-apache-2-2-16

网站实现HTTPS协议

HTTPS协议的作用和好处就不多说了。

整个过程的步骤,一是要找到一个证书。

二是安装证书,尤其对于一台服务器部署多个虚拟站点的情况。

证书方面,虽然自己也可以制作,但用户访问的时候,会提示需要用户接受该证书,这个很不友好。换成浏览器能接受的CA发行的证书就没有这个问题了。收费的不用说,贵的便宜的都有,一般的主机托管服务商都会有。免费的找到几家公认可以用的,一家是国内的wosign,一家是国外的startcom,应该都好用,免费ssl主要是针对域名进行验证的,申请过程中需要证明对域名的拥有权,可以通过在网站根目录上传特定文件,或者添加特定二级域名来验证。过程中还发现赛门铁克也注册了一个叫freessl.com的网站,里面显示即将推出免费ssl,咱们拭目以待吧。

安装证书一般都有教程,本人是阿里云的ECS服务器,centos6.7 + apache,找到对应教程即可。值得注意的是,阿里云版本的ssl配置文件位置和独立安装的centos的ssl配置文件的位置稍有不一样。

可以参考:https://freessl.wosign.com/aliyun-ssl.html

由于多数免费ssl会有对应的域名限制(譬如wosign上面最多允许一个证书对应5个域名),所以当单台服务器上有超过五个站点都需要启动https的时候,需要再申请另外的ssl。这时候,需要注意ssl配置文件里面的虚拟主机的设置。要考虑用不同的端口来对应不同的证书。