在Apache服务器安装SSL证书

更新时间: 2025-01-07 10:05:50

本文介绍如何在Apache服务器配置单域名或多域名以及通配符域名的SSL证书。成功配置SSL证书后,您将能通过HTTPS加密通道安全访问Apache服务器,确保数据传输的安全性。

重要

本文以CentOS操作系统、Apache 2.4.7为例介绍。不同版本的操作系统或Web服务器,部署操作可能有所差异,如有问题,请联系产品技术专家进行咨询,详情请参见专家一对一服务

前提条件

  • 已通过数字证书管理服务控制台签发证书。具体操作,请参见购买SSL证书(额度)提交证书申请

  • SSL证书绑定的域名已完成DNS解析,即您的域名与主机IP地址相互映射。您可以通过DNS验证证书工具,检测域名DNS解析是否生效。具体操作,请参见DNS生效验证

  • 已在Apache服务器安装mod_ssl.so模块(启用SSL功能)。

    如未安装,可执行sudo yum install -y mod_ssl命令安装。安装后,可执行httpd -M | grep 'ssl'检查mod_ssl.so是否安装成功。安装成功效果如下图:

    image..png

步骤一:下载SSL证书

  1. 登录数字证书管理服务控制台

  2. 在左侧导航栏,选择证书管理 > SSL证书管理

  3. SSL证书管理页面,定位到目标证书,在操作列,单击更多,然后选择下载页签。

  4. 如下图所示,下载Apache服务器对应的证书文件。

    image..png

  5. 解压缩已下载的SSL证书压缩包。

    根据您在提交证书申请时选择的CSR生成方式,解压缩获得的文件不同,具体如下表所示。CSR

    CSR生成方式

    证书压缩包包含的文件

    系统生成选择已有的CSR

    • 证书文件(CRT格式):默认以证书绑定域名_public命名。CRT格式的证书文件采用Base64-encoded编码的文本文件。

    • 证书链文件(CRT格式):默认以证书绑定域名_chain命名。

    • 私钥文件(KEY格式):默认以证书绑定域名命名。

    手动填写

    • 如果您填写的是通过数字证书管理服务控制台创建的CSR,下载后包含的证书文件与系统生成的一致。

    • 如果您填写的不是通过数字证书管理服务控制台创建的CSR,下载后只包括证书文件(PEM格式),不包含证书密码或私钥文件。您可以通过证书工具,将证书文件和您持有的证书密码或私钥文件转换成所需格式。转换证书格式的具体操作,请参见证书格式转换

步骤二:在Apache服务器安装证书

  1. 执行以下命令,在Apache服务器的安装目录下创建一个用于存放证书文件的目录。

    # cert目录仅为示例,证书存放目录没有命名限制。
    sudo mkdir /etc/httpd/cert
    说明

    /etc/httpd/ 是使用yum方式安装Apache服务器时默认安装目录。如果您手动修改过该目录或使用其他方式安装的Apache服务器,请根据实际配置调整。

  2. 将证书文件和私钥文件上传至您创建的用于存放证书文件的目录下。

    说明

    您可以使用远程登录工具附带的本地文件上传功能,上传文件。例如PuTTy、Xshell或WinSCP等。如果您使用的阿里云云服务器 ECS,上传文件具体操作,请参见上传或下载文件(Windows)上传文件到Linux云服务器

  3. 为确保Apache服务器能够正常启用SSL模块,请按以下步骤修改对应的配置文件:

    • 找到/etc/httpd/conf.modules.d/00-ssl.conf文件,修改LoadModule ssl_module modules/mod_ssl.so配置项,若前面有#号,需移除以取消注释,修改后保存文件。

      image

    • 找到/etc/httpd/conf/httpd.conf文件,修改Include conf.modules.d/*.conf配置项,若前面有#号,需移除以取消注释,修改后保存文件。

      image

    需要注意的是,上述配置项所在文件的具体位置可能会因系统版本或安装方式而有所不同。为了找到这些配置的确切位置,您可以使用grep 命令来在Linux系统上查找包含特定文本的所有文件。

    #查找包含LoadModule ssl_module的所有文件。
    sudo grep -r "LoadModule ssl_module" /etc/httpd/

    image

    #查找包含Include conf.modules.d的所有文件。
    sudo grep -r "Include conf.modules.d" /etc/httpd/

    image

    重要

    如果仍未找到以上参数,请确认您的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如何切换源?

  4. 修改与证书相关的配置。

    1. 执行以下命令,打开ssl.conf。

      sudo vim /etc/httpd/conf.d/ssl.conf
      重要

      ssl.conf文件在不同操作系统的位置和名称不一样,在没有ssl.conf文件的情况下,请您查看Apache服务器安装目录是否存在conf/extra/http-ssl.conf配置文件。

    2. 在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功能。如果不支持,多域名证书配置将无法生效。

  5. 可选:请根据您的业务需要,在/etc/httpd/conf/httpd.conf文件中添加以下重定向代码,设置HTTP请求自动跳转到HTTPS。

    RewriteEngine on
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
  6. 执行以下命令,重启Apache服务器,使修改后配置文件生效,确保SSL模块被正常启用。

    sudo systemctl restart httpd 

步骤三:验证SSL证书是否安装成功

证书安装完成后,您可通过访问证书的绑定域名验证该证书是否安装成功。

https://yourdomain   #需要将yourdomain替换成证书绑定的域名。
  • 如果浏览器的地址栏出现image图标,表示证书已经安装成功。

  • 从Chrome 117版本开始,Chrome浏览器将地址栏HTTPS的image改为了image图标。请单击该图标,参考如下示例,出现image标志时,表示证书安装成功。

    image

相关文档

上一篇: WordPress环境上安装SSL证书 下一篇: Tomcat服务器安装SSL证书
阿里云首页 数字证书管理服务(原SSL证书) 相关技术圈