本文介绍在Apache服务器上配置单域名或多域名证书、以及通配符域名证书的方法,包括证书文件的下载与上传、配置证书参数及安装后的验证步骤。
本文以Linux操作系统、Apache/Apache2服务器为例介绍。不同版本的操作系统或Web服务器,部署操作可能有所差异,如有问题,请联系产品技术专家进行咨询,详情请参见专家一对一服务。
前提条件
操作步骤
步骤一:下载SSL证书
登录数字证书管理服务控制台。在左侧导航栏选择 。
在SSL证书管理页面,定位需部署的目标证书,并确认以下信息:
在目标证书操作列单击更多进入证书详情页面,然后在下载页签中下载服务器类型为 Apache 的证书。
解压下载的证书压缩包:
若同时包含证书文件(<绑定域名>_public.crt)、证书链文件(<绑定域名>_chain.crt)和私钥文件(<绑定域名>.key),请妥善保存上述文件,后续部署时均需使用。
若仅包含证书文件(<绑定域名>_public.crt)、证书链文件(<绑定域名>_chain.crt),不含私钥文件(<绑定域名>.key),需配合您本地保存的私钥文件一起部署。
说明若申请证书时使用 OpenSSL、Keytool 等工具生成 CSR 文件,私钥文件仅保存在您本地,下载的证书包中不包含私钥。如私钥遗失,证书将无法使用,需重新购买正式证书并生成CSR和私钥。
步骤二:在Apache服务器安装证书
登录 Linux 服务器。
阿里云服务器
以下操作以阿里云云服务器 ECS 为例进行说明,其他类型的服务器请参照对应产品文档进行操作。
登录ECS管理控制台,在页面左侧顶部,选择目标ECS实例所在地域。
在左侧导航栏中选择
,在实例页面找到目标ECS实例,点击操作列的远程连接。在弹出的对话框中,选择通过Workbench远程连接并单击立即登录。
选择终端连接作为连接方式,输入相关认证信息,并根据页面提示完成登录,即可进入服务器终端。详细操作请参考使用Workbench登录ECS实例。
说明若系统弹出“安全组白名单开通提示”面板,请按照页面提示单击一键添加。
其他云厂商服务器
请通过对应云厂商提供的远程连接功能登录服务器终端。
非云厂商服务器(如物理服务器、IDC托管主机等)
请在本地使用SSH工具登录服务器终端。
后续部分命令因操作系统类型不同而略有差异。请根据实际的服务器操作系统,选择对应的命令操作。
RHEL/CentOS 系列:包括 Alibaba Cloud Linux、Red Hat Enterprise Linux、CentOS、AlmaLinux、Rocky Linux、Anolis OS 及其衍生版本。
Debian/Ubuntu 系列:包括 Debian、Ubuntu 及其衍生版本。
开放安全组和防火墙的 443 端口。
在服务器终端执行以下命令,检测443端口的开放情况:
RHEL/CentOS 系列
command -v nc > /dev/null 2>&1 || sudo yum install -y nc # 请将以下的 <当前服务器的公网 IP> 替换为当前服务器的公网 IP sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <当前服务器的公网 IP> 443
如果输出
Ncat: Connected to <当前服务器公网 IP>:443
,则表明443端口已开放。否则需在安全组和防火墙中开放443端口。Debian/Ubuntu 系列
command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat # 请将以下的 <当前服务器的公网 IP> 替换为当前服务器的公网 IP sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <当前服务器的公网 IP> 443
若输出
Connection to <当前服务器公网 IP> port [tcp/https] succeeded!
或[<当前服务器公网 IP>] 443 (https) open
,则表明443端口已开放。否则需在安全组和防火墙中开放443端口。若端口未开放,可参照如下操作在安全组和防火墙中开放443端口。
Apache和Apache2部署SSL证书的步骤基本一致,请参照选择合适的版本。
Apache
将证书文件和私钥文件上传至您创建的用于存放证书文件的目录下。
说明您可以使用远程登录工具附带的本地文件上传功能,上传文件。例如PuTTY、Xshell或WinSCP等。如果您使用的是阿里云云服务器 ECS,上传文件具体操作,请参见使用远程桌面或Windows APP向Windows实例传输文件或上传文件到Linux云服务器。
为确保Apache服务器能够正常启用SSL模块,请按以下步骤修改对应的配置文件:
找到
/etc/httpd/conf.modules.d/00-ssl.conf
文件,修改LoadModule ssl_module modules/mod_ssl.so
配置项,若前面有#
号,需移除以取消注释,修改后保存文件。找到
/etc/httpd/conf/httpd.conf
文件,修改Include conf.modules.d/*.conf
配置项,若前面有#
号,需移除以取消注释,修改后保存文件。
需要注意的是,上述配置项所在文件的具体位置可能会因系统版本或安装方式而有所不同。为了找到这些配置的确切位置,您可以使用
grep
命令来在Linux系统上查找包含特定文本的所有文件。#查找包含LoadModule ssl_module的所有文件。 sudo grep -r "LoadModule ssl_module" /etc/httpd/
#查找包含Include conf.modules.d的所有文件。 sudo grep -r "Include conf.modules.d" /etc/httpd/
重要如果仍未找到以上参数,请确认您的Apache服务器中是否已经安装
mod_ssl.so
模块。如未安装,可执行sudo yum install -y mod_ssl
命令安装,安装后,可执行httpd -M | grep 'ssl'
命令检查mod_ssl.so
模块是否安装成功。2022年1月1日起CentOS官方将不再对CentOS 8提供服务支持,如果您的操作系统是CentOS 8,yum命令可能无法正常使用,具体解决办法,请参见CentOS 8 EOL如何切换源?。
修改与证书相关的配置。
执行以下命令,打开ssl.conf。
sudo vim /etc/httpd/conf.d/ssl.conf
重要ssl.conf文件在不同操作系统的位置和名称不一样,在没有ssl.conf文件的情况下,请您查看Apache服务器安装目录是否存在
conf/extra/http-ssl.conf
配置文件。在ssl.conf配置文件中,定位到以下参数,按照中文注释修改。
安装单域名或多域名证书配置文件
<VirtualHost *:443> ServerName example.com # 修改为申请证书时绑定的域名。 SSLCertificateFile cert/domain_name_public.crt # 将domain_name_public.crt替换成您证书文件名。 SSLCertificateKeyFile cert/domain_name.key # 将domain_name.key替换成您证书的密钥文件名。 SSLCertificateChainFile cert/domain_name_chain.crt # 将domain_name_chain.crt替换成您证书的证书链文件名。 #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置) #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。 #SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。 #SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM # 修改加密套件。 </VirtualHost> #如果证书包含多个域名,复制VirtualHost参数,并将ServerName修改为第二个域名。 <VirtualHost *:443> ServerName example2.com#修改为申请证书时绑定的第二个域名。 SSLCertificateFile cert/domain_name2_public.crt # 将domain_name2替换成您申请证书时的第二个域名。 SSLCertificateKeyFile cert/domain_name2.key # 将domain_name2替换成您申请证书时的第二个域名。 SSLCertificateChainFile cert/domain_name2_chain.crt # 将domain_name2替换成您申请证书时的第二个域名。 SSLEngine on SSLHonorCipherOrder on #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置) #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。 #SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。 #SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM # 修改加密套件。 </VirtualHost>
安装通配符域名证书配置文件
<VirtualHost _default_:443> #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要修改) #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差 SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA #将domain_name_public.crt替换成您证书文件名。 SSLCertificateFile /etc/httpd/cert/domain_name_public.crt #将domain_name.key替换成您证书的私钥文件名。 SSLCertificateKeyFile /etc/httpd/cert/domain_name.key #将domain_name_chain.crt替换成您证书的证书链文件名。 SSLCertificateChainFile /etc/httpd/cert/domain_name_chain.crt </VirtualHost>
重要如果您要在Apache服务器安装多域名SSL证书,请关注您的浏览器版本是否支持SNI功能。如果不支持,多域名证书配置将无法生效。
可选:请根据您的业务需要,在
/etc/httpd/conf/httpd.conf
文件中添加以下重定向代码,设置HTTP请求自动跳转到HTTPS。RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
执行以下命令,重启Apache服务器,使修改后配置文件生效,确保SSL模块被正常启用。
sudo systemctl restart httpd
Apache2
执行以下命令,在Apache2的安装目录下创建一个用于存放证书的ssl目录。
mkdir /etc/apache2/ssl
将证书文件和私钥文件上传到Apache2证书目录(
/etc/apache2/ssl
)。说明您可以使用远程登录工具附带的本地文件上传功能,上传文件。例如PuTTY、Xshell或WinSCP等。如果您使用的是阿里云云服务器 ECS,上传文件具体操作,请参见使用远程桌面或Windows APP向Windows实例传输文件或上传文件到Linux云服务器。
执行以下命令,启用SSL模块。
sudo a2enmod ssl
SSL模块启用后,会在
/etc/apache2/sites-available
目录生成SSL证书配置文件default-ssl.conf。说明default-ssl.conf文件可能存放在
/etc/apache2/sites-available
或/etc/apache2/sites-enabled
目录中。sites-available
目录存放的是可用的虚拟主机。sites-enabled
目录存放的是已经启用的虚拟主机。
SSL模块启用后,会自动放行用于HTTPS服务的443端口。若443端口未自动放行,可在
/etc/apache2/ports.conf
配置文件中添加Listen 443,手动放行443端口。
编辑default-ssl.conf文件,修改与证书相关的配置。
执行以下命令,打开default-ssl.conf文件。
vim /etc/apache2/sites-available/default-ssl.conf
在default-ssl.conf配置文件中,定位到以下参数,按照中文注释修改。
ServerName example.com #请将example.com替换为您证书绑定的域名。部分服务器,没有该配置参数,您需要手动添加。 SSLCertificateFile /etc/apache2/ssl/domain_name_public.crt #证书文件路径。请替换为实际证书文件路径。 SSLCertificateKeyFile /etc/apache2/ssl/domain_name.key #证书私钥文件路径。请替换为实际证书私钥文件路径。 SSLCertificateChainFile /etc/apache2/ssl/domain_name_chain.crt #证书链文件路径。请替换为实际证书链文件路径。
执行以下命令,将default-ssl.conf映射至
/etc/apache2/sites-enabled
目录,实现两者之间的自动关联。sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl.conf
执行以下命令,重新加载Apache2配置文件。
sudo /etc/init.d/apache2 force-reload
执行以下命令,重启Apache2服务。
sudo /etc/init.d/apache2 restart
步骤三:验证SSL证书是否安装成功
证书安装完成后,您可通过访问证书绑定的域名验证该证书是否安装成功。
https://yourdomain #需要将yourdomain替换成证书绑定的域名。
如果浏览器的地址栏出现图标,表示证书已经安装成功。Chrome浏览器自117版本开始已将地址栏中的
图标移至
图标中,如下图所示:
如仍有问题,请参考常见问题进行排查。
后续步骤(可选)
开启域名监控
建议在证书部署完成后,为域名开启域名监控功能。系统将自动检测证书有效期,并在到期前发送提醒,帮助您及时续期,避免服务中断。具体操作请参见购买并开启公网域名监控。
常见问题
安装或更新证书后,证书未生效或 HTTPS 无法访问
常见原因如下:
域名未完成备案。请参见如何查看域名解析记录以及 ICP 备案信息。
服务器安全组或防火墙未开放 443 端口。请参见开放安全组和防火墙的 443 端口。
证书的绑定域名未包含当前访问的域名。请参见确认证书是否匹配目标域名。
修改 Apache/Apache2配置文件后,未重启服务。具体操作可参见重启Apache服务、重启Apache2服务。
证书文件未正确替换,或 Apache 配置未正确指定证书路径。请检查 Apache 配置文件和所用证书文件是否为最新且有效。
域名已接入 CDN、SLB 或 WAF 等云产品,但未在相应产品中安装证书。请参阅云产品部署证书完成相关操作。
当前域名的 DNS 解析指向多台服务器,但证书仅在部分服务器上安装。需分别在每个服务器中安装证书。
如需进一步排查,请参考:根据浏览器错误提示解决证书部署问题 和 SSL证书部署故障自助排查指南。
如何更新(替换)Apache 中已安装的 SSL 证书
请先备份服务器上原有的证书文件(.crt,以及.key文件),然后登录数字证书管理服务控制台,下载新的证书文件,并上传到目标服务器覆盖原有文件(确保路径和文件名一致)。最后,重启Apache服务,使新证书生效。