Apache虚拟主机绑定域名证书和ssl_module模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache虚拟主机绑定域名证书和ssl_module模块相关的知识,希望对你有一定的参考价值。

本文档只是用于yum安装的Apache!!!

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

HTTPS和HTTP的区别:
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

HTTPS和HTTP的区别主要为以下四点:
1、https协议需要到ca申请证书,一般免费证书很少,需要交费。
2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

首先我们需要申请域名证书,域名证书可以到一些免费证书的申请网站申请,比如说阿里云的云盾证书服务,可以在上面申请三张一年有效期的单域名免费证书
技术分享图片

申请通过后点击下载,把证书文件上传到服务器上
技术分享图片

然后,我们在Apache上使用yum安装ssl_module模块

yum -y install ssl_module

安装好之后,在/etc/httpd/conf.d/目录下多了一个ssl.conf文件,编辑这个文件

LoadModule ssl_module modules/mod_ssl.so #加载sslmodule模块
Listen 443 #开启443监听端口
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin

<VirtualHost :443> #配置虚拟主机
ServerName www.abc.com
#配置虚拟主机域名
DocumentRoot "/var/www/html/abc"
#配置虚拟主机站点目录
ErrorLog logs/ssl_error_log
#配置虚拟主机错误日志存放的位置
TransferLog logs/ssl_access_log
#配置虚拟主机访问日志存放的位置
LogLevel warn
#配置虚拟主机访问日志记录的级别
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
#添加SSL协议支持协议,去掉不安全的协议
#修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
SSLCertificateFile cert/abc.pem
#证书公钥存放位置
SSLCertificateKeyFile cert/abc.key
#证书私钥存放位置
SSLCertificateChainFile cert/abc-chain.pem
#证书链存放位置*

<Files ~ ".(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>

<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

SetEnvIf User-Agent ".MSIE." \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

配置好后重启httpd服务

service httpd restart

如果重启中报Starting httpd: [Sat May 05 12:18:52 2018] [warn] default VirtualHost overlap on port 443, the first has precedence的错误,那么说明并没有应用ssl文件中的虚拟主机配置文件,需要在httpd.conf主配置文件中加上下面的配置就好了。

NameVirtualHost *:443

以上是关于Apache虚拟主机绑定域名证书和ssl_module模块的主要内容,如果未能解决你的问题,请参考以下文章

apache2虚拟主机实现一个服务器绑定多个域名

apache 一个ip怎么绑定多个域名不同目录

Ubuntu+apache绑定多个域名

在同一个服务器(同一个IP)为不同域名绑定的免费SSL证书

Apache虚拟目录实现同一个IP绑定多个域名

Nginx反代,后端一个IP绑定多个SSL证书,导致连接失败之解决方法:HTTPS和SNI扩展