今天给一个网站配置了ssl证书,过程当中踩到不少坑,前先后后耗时6个小时才查明问题,在此记录下,以做后续参考。html
已有网站 http://www.example.com,给其配置ssl证书,使得访问 https://www.example.com。apache
SSL证书申请方式,网上有不少免费的我的证书直接申请。也可本身使用工具手动生成,但会产生 “未受权访问被拒绝,或者安全性设置已到期 / :ERR_CERT_AUTHORITY_INVALID ”,不建议使用。centos
通常申请到的证书,会给你三个文件。先将以上文件所有上传到服务器。安全
上传到任何目录都可,不限制,可按照文中来,后续修改bash
*.cer 上传到 /etc/pki/tls/certs/目录 文件名:www.explame.com.cer服务器
*.crt 上传到 /etc/pki/tls/certs/ 目录 www.explame.com.crt工具
*.key 上传到/etc/pki/tls/private/目录 www.explame.com.key测试
很失败的,我第一个坑踩到了证书文件上,后面讲下具体起因。网站
以前的环境是yum安装的httpd方式,编译安装的请搜索编译安装mod_ssl.so方法。编码
yum安装方式:
yum install mod_ssl
安装完毕后,默认会给你生成一堆配置及mod_ssl.so 且已加载。
/etc/httpd/conf.d/ssl.conf SSL默认配置文件
网上不少教程都会教你在当前这个默认文件里修改配置使用,其实这个文件彻底能够不用修改的,忽略他,在你自己存在的网站配置上修改也同样起效。这个坑,不少人容易踩。
本来配置
<VirtualHost *:80> ServerName default DocumentRoot "/var/WEB/default/wwwroot" ServerAlias www.example.com www.local116.com ErrorLog "/var/WEB/default/log/error.log" CustomLog "/var/WEB/default/log/access.log" common </VirtualHost>
追加配置
<VirtualHost *:443> ServerName www.example.com:443 DocumentRoot "/var/WEB/default/wwwroot" ServerAlias www.example.com www.local116.com ErrorLog "/var/WEB/default/log/error.log" CustomLog "/var/WEB/default/log/access.log" common SSLEngine on SSLCertificateFile "/etc/pki/tls/certs/www.example.com.crt" SSLCertificateKeyFile "/etc/pki/tls/private/www.example.com.key" </VirtualHost> ###详解配置### <VirtualHost *:443> 主要是443的匹配做用,决定该网站接收端口 ServerName www.example.com:443 域名后面的:443 无关紧要 ServerAlias 这里配置的全部域名都将可使用https访问,前提是证书支持这些域名 SSLEngine on 开启SSL SSLCertificateFile 配置证书文件 SSLCertificateKeyFile 配置证书秘钥文件
配置追加完毕后,重启httpd(很重要)。
方式一:
httpd -k stop
httpd -k start (无错误及其余任何信息提示,觉得是启动成功了,访问网页发现是决绝访问,查看进程以后发现httpd根本没有启动)
方式二:
systemctl restart httpd.service
查看错误发现基本是找不到什么具体错误的
通过反反复复测试,改删配置才搞清出问题。
CRT - CRT应该是certificate的三个字母,其实仍是证书的意思,常见于*NIX系统,有多是PEM编码,也有多是DER编码,大多数应该是PEM编码,相信你已经知道怎么辨别.
CER - 仍是certificate,仍是证书,常见于Windows系统,一样的,多是PEM编码,也多是DER编码,大多数应该是DER编码.
KEY - 一般用来存放一个公钥或者私钥,并不是X.509证书,编码一样的,多是PEM,也多是DER.
由于当前使用的centos(LINUX系),使用的证书并非.crt仍是csr。
意识到配置中的证书文件选择错了,将其修改过来。
<VirtualHost *:443> ServerName www.example.com:443 DocumentRoot "/var/WEB/default/wwwroot" ServerAlias www.example.com www.local116.com ErrorLog "/var/WEB/default/log/error.log" CustomLog "/var/WEB/default/log/access.log" common SSLEngine on SSLCertificateFile "/etc/pki/tls/certs/www.example.com.csr" #此处修改成csr文件 SSLCertificateKeyFile "/etc/pki/tls/private/www.example.com.key" </VirtualHost>
再次从新启动httpd
systemctl restart httpd.service
这次终于启动成功,还有不少问题,譬如配置证书,http能够访问,https没法访问文件(404)大多都是由于证书引发的,必须确认访问的域名和配置的域名以及申请证书的域名是一致的。
注意,默认ssl.conf里面已经配置监听443端口的操做。不能再httpd.conf或者其余虚拟主机.conf里面增长监听,不然也会引发没法启动httpd。
ssl.conf
Listen 443 https
遇到一些用户说,将apache httpd升级到2.4以后须要修改这个配置。
Listen 127.0.0.1:443 https
给其增长IP绑定,我测试发现并非必须的,ssl.conf是不须要改一个字符的。
当前版本: Apache/2.4.6 (CentOS)
若是遇到问题,能够尝试修改此处,测试是否得以解决。
查看相关日志
systemctl status httpd.service -l
tail /var/log/messages
若是发现是关于443的问题,检查后台是否有其余程序监听443。
netstat -nao|grep 443
或者检查全部被httpd引入的文件是否出现多个监听端口(Listen 443),若有修改后通常问题则解决。
可使用httpd -S 查看当前httpd加载的文件配置,逐个进行排查。
检查如下问题,保证无误,基本能解决问题。
本文引用: