CentOS Apache配置SSL让网站对外提供https服务

本文假设你的apache是通过 yum的方法安装的。(手工编译安装的请立刻关闭此文,难到你还不会SSL配置?)

启动apache命令:
systemctl start httpd.service (注意不是:service httpd start ,老命令了)

默认apache是没有安装SSL模块的,所以需要安装,接着使用命令:
yum install -y mod_ssl

安装结束后,在你的/etc/httpd/conf.d 下面会出现一个 SSL.conf ,否则是没有的

打开SSL.conf,要配置一下。

首先来到 这样的字样。寻找、替换或者自己打入如下配置:

DocumentRoot “这里填你网站的根目录”
ServerName 域名:443

接下来就是配置证书路径:(这里建议大家去网上找个SSL购买证书的网站,譬如“沃通”,然后去申请个临时免费的证书。不要自签名,没啥意思。网上又不要钱,临时用完了再申请一次)

申请好证书后,一般会给你三个文件。一个是根证书(譬如root_bundle.crt),一个是服务端证书(譬如www.xxx.com.crt),一个是证书私钥(譬如www.xxxx.com.key).大家注意后缀名,自己想一想。

然后把这三个证书通过ftp传到你喜欢的文件夹中。

一般来说 我们网站都只要服务端单向认证,也就是不需要验证客户端,那么只要配置以下两个部分

1、SSLCertificateFile 这里放你的服务端证书路径
2、SSLCertificateKeyFile 放私钥文件路径

如果你还需要客户端服务端双向,那么除了上述部分还要加入以下:

1、SSLCACertificateFile root_bundle.crt的路径
2、SSLVerifyClient require

其余部分一边度娘一边改,这里就不多说了。以上是一个最简单的apache SSL配置。配好后一定要:

1、重启apache ,不要问为什么,不告诉你

2、尝试用https://xxxx.com 的方式来访问一下对不对

3、如果没有域名,那么你可以更改hosts文件来实现。不要问怎么改hosts文件,不想解释,太累

注意:

1、有时候会提示SSLCertificateKeyFile: file ‘xxx/xxx/xxx.key’ does not exist or is empty,这是SELinux服务的原因,setforce 0 把该服务先关闭,如果需要永久关闭,进配置文件/etc/sysconfig/selinux

2、在开启https后会造成原有的http服务中伪静态失效,原因有可能是之前伪静态配置在httpd.conf中,而现在不再是80端口提供服务,因此要将伪静态的那段规则复制一份到ssl.conf的中间

3、如果需要让http访问能自动跳转到https访问,可以在http的伪静态中添加如下规则

1
2
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

PS:最好是添加到伪静态规则的最前面,这样效率会更高一些,不解释。

One thought on “CentOS Apache配置SSL让网站对外提供https服务

  1. Sian Post author

    如果私钥设置了密码,每次web服务启动的时候都需要输入密码,这样系统自启动时就会造成web服务启动失败,如果需要去掉密码可执行以下命令:

    1
    
    CentOS:~ sian#openssl rsa -in server.key -out server.key

    前面那个server.key是原私钥,后面这个server.key是新生成的私钥,相同则直接覆盖,如需要保留原私钥则这两个文件设置成不同的文件名即可!

Leave a Reply