基于阿里云的帮助文档,但是文档很多地方太陈旧了。
Operating System: CentOs Linux 8
Webserver: Apache 2.4.37
1.解压已下载保存到本地的Apache证书文件
解压后的文件夹中有3个文件:
- 证书文件:以.crt为后缀或文件类型。
- 证书链文件:以.crt为后缀或文件类型。
- 密钥文件:以.key为后缀或文件类型
在Apache的目录下新建一个文件夹,名称随意(建议cert
)。然后将这三个文件放到这个文件夹里面。
Linux Apache安装目录
1、RPM包安装方式
● 采用RPM包安装,安装路径应在 /etc/httpd目录下
apache配置文件:/etc/httpd/conf/httpd.conf 可以修改相关的访问路径及配置
Apache模块路径:/usr/sbin/apachectl 启动模块
web目录:/var/www/html 项目的存储路径
2、源码编译安装方式
● 采用源代码安装,一般默认安装在/usr/local/apache2目录下。
2.检查Apache服务器中是否已经安装mod_ssl.so模块。
如未安装,可执行yum install -y mod_ssl
命令安装mod_ssl.so模块。安装后,可执行httpd -M|grep "ssl"
命令检查mod_ssl.so是否安装成功。安装完成后 /etc/httpd/conf.d 目录下会出现一个ssl.conf文件
在这个文件里面找到如下内容进行更改,将后面的文件路径替换为你自己的证书文件(之前放在Apache/cert路径下的三个证书文件)路径,文件路径是绝对路径。
SSLCertificateFile xxx_public.crt
SSLCertificateKeyFile xxx.key
SSLCertificateChainFile xxx_chain.crt
然后继续在此文件中配置找到以下内容配置443站点信息(这里只说明内容,按照内容直接改就可以)
DocumentRoot "/var/www/html" #(引号里面是你的项目的路径,默认是/var/www/html)
ServerName xxxxx (这里的xxxxx是你的域名)
<Directory "/var/www/html"> #(引号里面是你的项目的路径,默认是/var/www/html)
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
有的教程会再去在Apache安装目录下,打开Apache/conf/httpd.conf,在httpd.conf文件中找到以下参数并进行配置。
#LoadModule ssl_module modules/mod_ssl.so #删除行首的配置语句注释符号“#”加载mod_ssl.so模块启用SSL服务,Apache默认是不启用该模块的。如果找不到该配置,请重新编译mod_ssl模块。
#Include conf/extra/httpd-ssl.conf #删除行首的配置语句注释符号“#”。
但是我尝试之后发现会导致报错,不进行这一步反而一切正常。
Starting The Apache HTTP Server…
Jan 13 15:35:21 打码我的服务器地址 httpd[22343]: AH00526: Syntax error on line 5 of /etc/httpd/conf.d/ssl.conf:
Jan 13 15:35:21 打码我的服务器地址 httpd[22343]: Cannot define multiple Listeners on the same IP:port
Jan 13 15:35:21 打码我的服务器地址 systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
Jan 13 15:35:21 打码我的服务器地址 systemd[1]: httpd.service: Failed with result ‘exit-code’.
Jan 13 15:35:21 打码我的服务器地址 systemd[1]: Failed to start The Apache HTTP Server.
3.修改httpd-ssl.conf(但我压根没找到)配置文件。
原教程说是在Apache/conf/extra/目录下,打开httpd-ssl.conf文件。根据操作系统的不同,http-ssl.conf文件也可能存放在conf.d/ssl.conf/目录下。
但在我这个服务器上其实还是ssl.conf文件。
在文件中找到以下参数,按照下文中注释内容进行配置。
<VirtualHost *:443>
ServerName #修改为申请证书时绑定的域名。
DocumentRoot /data/www/hbappserver/public
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM # 修改加密套件。
SSLHonorCipherOrder on
SSLCertificateFile cert/domain_name1_public.crt # 将domain_name1_public.crt替换成您证书文件名。
SSLCertificateKeyFile cert/domain_name1.key # 将domain_name1.key替换成您证书的密钥文件名。
SSLCertificateChainFile cert/domain_name1_chain.crt # 将domain_name1_chain.crt替换成您证书的密钥文件名;证书链开头如果有#字符,请删除。
</VirtualHost>
你可能会注意到最后三行的内容我们第一步其实就做过了。
4.重启Apache服务器使SSL配置生效。
重启 service httpd restart
开启 service httpd start
查看状态(报错) service httpd status
其实每次改完它自己就重启了,更多情况是打错字了导致Apache罢工了,不得不来回查看报错……
5.可选:修改httpd.conf文件,设置HTTP请求自动跳转HTTPS。
在httpd.conf文件中的<VirtualHost *:80> </VirtualHost>
中间,添加以下重定向代码。
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
我没成功。。。等之后填坑