在Apache服务器上安装SSL证书

青春壹個敷衍的年華 提交于 2020-03-10 17:09:20

前提是你先买好证书,下载下来,证书压缩包打开共有3个文件

 

  • 证书文件:以.crt为后缀或文件类型。
  • 证书链文件:以.crt为后缀或文件类型。
  • 密钥文件:以.key为后缀或文件类型。

 

Apache安装目录中新建cert目录,并将解压的Apache证书、 证书链文件和密钥文件拷贝到cert目录中。

如果需要安装多个证书,需在Apache目录中新建对应数量的cert目录,用于存放不同的证书 。

 如果申请证书时选择了手动创建CSR文件,请将手动生成创建的密钥文件拷贝到cert目录中并命名为domain name.key。

 

 

 

 

在Apache安装目录下,打开Apache/conf/httpd.conf文件,并找到以下参数,按照下文中注释内容进行配置

#LoadModule ssl_module modules/mod_ssl.so  #删除行首的配置语句注释符号“#”加载mod_ssl.so模块启用SSL服务,Apache默认是不启用该模块的。如果找不到该配置,请重新编译mod_ssl模块。
#Include conf/extra/httpd-ssl.conf  #删除行首的配置语句注释符号“#”。  

httpd.conf文件并退出

 

打开Apache/conf/extra/httpd-ssl.conf文件并找到以下参数,按照下文中注释内容进行配置。

证书路径建议使用绝对路径。

根据操作系统的不同,http-ssl.conf文件也可能存放在conf.d/ssl.conf目录中。

<VirtualHost *:443>     
    ServerName   #修改为申请证书时绑定的域名www.YourDomainName1.com。                    
    DocumentRoot  "D:/phpStudy/WWW/yg"         
    SSLEngine on   
    SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。
    SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM   # 修改加密套件。
    SSLHonorCipherOrder on
    SSLCertificateFile "D:/phpStudy/Apache/cert/2335105__yg1st.com_public.crt"   # 将domain name1_public.crt替换成您证书文件名。
    SSLCertificateKeyFile "D:/phpStudy/Apache/cert/2335105__yg1st.com.key"   # 将domain name1.key替换成您证书的密钥文件名。
    SSLCertificateChainFile "D:/phpStudy/Apache/cert/2335105__yg1st.com_chain.crt"  # 将domain name1_chain.crt替换成您证书的密钥文件名;证书链开头如果有#字符,请删除。
</VirtualHost>

#如果证书包含多个域名,复制以上参数,并将ServerName替换成第二个域名。 
<VirtualHost *:443>     
    ServerName   #修改为申请证书时绑定的第二个域名www.YourDomainName2.com。                    
    DocumentRoot  "D:/phpStudy/WWW/yg"        
    SSLEngine on   
    SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。
    SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM   # 修改加密套件。
    SSLHonorCipherOrder on
    SSLCertificateFile "D:/phpStudy/Apache/cert/2335105__yg1st.com_public.crt"   # 将domain name2替换成您申请证书时的第二个域名。
    SSLCertificateKeyFile "D:/phpStudy/Apache/cert/2335105__yg1st.com.key"   # 将domain name2替换成您申请证书时的第二个域名。
    SSLCertificateChainFile "D:/phpStudy/Apache/cert/2335105__yg1st.com_chain.crt"  # 将domain name2替换成您申请证书时的第二个域名;证书链开头如果有#字符,请删除。
</VirtualHost>

 

改完之后,注意这文件里有一些关于logs文件的,路径一定要改对,根据实际路径来

比如我的就是:

ErrorLog "D:\phpStudy\Apache\logs\error.log"
TransferLog "D:\phpStudy\Apache\logs\access.log"

 

改完之后打开cmd

进入你的apache安装目录的bin目录下

使用:httpd -t

测试,如果有报错就根据提示信息修改;没有报错则重启apache即可

 

网站成功安装证书,可以用https打开

这样做完的结果是,用https可以打开,但是http开头的还是打不开

还需要设置让http开头的网站自动跳转到https开头

在httpd.conf的<Directory>标签内,键入以下内容

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R=301]

当然我的不完全是这样,因为我有设置别的伪静态规则,因此做了一些调整

 

证书安装完成之后,发现在谷歌浏览器里左上角有个提示,点开显示网站连接并非完全安全

原因是我们的页面存在一些不安全的http请求,比如图片、js等静态文件。

我们只需要将其升级为https请求即可。

页面的head中加入:

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

意思是自动将http的不安全请求升级为https
添加之后,谷歌浏览器显示“链接是安全的”

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!