最近上云,将个人网站漫岛的代码从阿里云的虚拟主机迁移到阿里云的ECS服务器,中间给网站配置ssl证书的时候遇到一些麻烦,参照网上的方法均不起任何作用,可能我这个问题比较个性,自己花了两天时间才解决,首先看下常规的SSL证书配置方案:
1.在Apache的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为a.key;
2.打开 apache 安装目录下 conf 目录中的 httpd.conf 文件,找到以下内容并去掉“#”。
#LoadModule ssl_module modules/mod_ssl.so (如果找不到请确认是否编译过 openssl 插件)
#Include conf/extra/httpd-ssl.conf(删除行首的配置语句注释符号“#”,保存后退出)
3.打开 apache 安装目录下 conf/extra/httpd-ssl.conf 文件 (也可能是conf.d/ssl.conf,与操作系统及安装方式有关), 在配置文件中查找以下配置语句:
# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 证书公钥配置
SSLCertificateFile cert/a_public.crt
# 证书私钥配置
SSLCertificateKeyFile cert/a.key
# 证书链配置,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile cert/a_chain.crt
4.重启 Apache
以上是常规解决方案,网上大部分指导操作都是这样的,这并不没有解决我的问题,当我按照这样配置后,apache无法启动,错误日志显示Parent process exited abruptly. Child process is ending(父进程突然退出,子进程正在结束!)
以上错误的原因无非是配置文件出错,用代码注释法很容易排查出问题出在第二步#Include conf/extra/httpd-ssl.conf(删除行首的配置语句注释符号“#”,保存后退出)
,然而问题虽然很明确,但是改了很久也没能解决,最后抛弃了这种方案,下面是我的解决方案。
- 1.打开 Apache 安装目录下 conf 目录中的 httpd.conf 文件,找到以下内容并去掉前面的“#”注释符,使得SSL模块生效。
- 2.不解开
#Include conf/extra/httpd-ssl.conf
的注释,引用我们手动写的一个简单配置文件。即增加一条引用:【Include conf/vhostssl.conf】,如下图所示:
vhostssl.conf
内容如下,自己替换相应内容:
Listen xml
<VirtualHost *:443>
DocumentRoot "C:\projects\PhpStudy20180211\PHPTutorial\WWW"
ServerName www.iscoser.com
ServerAlias iscoser.com
SSLEngine on
SSLProtocol TLSv1 TLSv1.1 TLSv1.2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCertificateFile "C:\projects\PhpStudy20180211\PHPTutorial\Apache\cert\xx.com_public.crt"(证书公钥)
SSLCertificateKeyFile "C:\projects\PhpStudy20180211\PHPTutorial\Apache\cert\xx.com.key"(证书私钥)
SSLCertificateChainFile "C:\projects\PhpStudy20180211\PHPTutorial\Apache\cert\xx_chain.crt"(证书链)
<Directory "C:\projects\PhpStudy20180211\PHPTutorial\WWW">
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
3.重启apache(注意443端口是否被防火墙拦截或被占用);
经历以上步骤,我终于解决了ssl证书的配置问题,网上大部分的博客也好或者是其他的文章也好,套路都差不多,所以我在这里提供一个额外的思路供大家参考,另外说一句,我用的是lamp的集成环境。