- HTTPS协议简介
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer,基于SSL的HTTP协议)使用了HTTP协议,但HTTPS使用不同于HTTP协议的默认端口及一个加密、身份验证层(HTTP与TCP之间)。这个协议的最初研发由网警公司进行,提供了身份验证与加密通信方法,现在它被广泛应用于互联网上安全敏感的通信。
在访问HTTPS网站时,客户端输入的URL路径中的http必须改为https。
客户端在使用HTTPS方式与WEB服务器通信时有以下几个步骤。
(1)客户使用https的URL访问web服务器,要求与web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。
2、HTTPS配置
Apache实现HTTPS需要使用mod_ssl模块,无论采用下述哪种方式配置HTTPS首先需要安装该模块。
2.1 自颁发证书
自颁发证书是指HTTPS所使用的整数不是有一个权威的整数颁发机构(CA)所颁发,这样在客户端访问网站时会收到“该证书由您没有信任的公司颁发或类似的警告信息。”
(1)使用如下命令安装mod_ssl模块。
Yum install mod_ssl.i
(2)建立一个用于存放证书的目录
Mkdir /usr/local/httpd/.sslkey
(3)建立网站私钥文件
Cd /usr/local/httpd/.sslkey
Openssl genrsa -out server.key 1024
(4)建立网站证书文件,在建立网站证书时需要输入相关信息,这些信息可根据需要输入,但“Common Name”必须是客户端访问时的FQDN
Cd /usr/local/httpd/.sslkey
Openssl req -new -x509 -key server.key -out server.crt
(5)为了保证证书文件安全,可修改证书存放目录的权限
Chmod -R 400 /etc/httpd/.sslkey
(6)配置网站为HTTPS
NameVirtialHost 192.168.0.10:80
<VirtualHost 192.168.0.10:443> //将网站侦听端口改为443
DocumentRoot /var/site/bbs.example.com
ServerName bbs.example.com
SSLEngine on //开启SSL
SSLCertificateFifle /usr/local/httpd/.sslkey/server.crt //指定证书文件
SSLCertificateKeyFile /usr/local/httpd/./sslkey/server.key //指定私钥文件
</VirtualHost>
2.2 CA颁发证书
如果希望使用一个客户端信任的CA的整数必须首先生成一个CA的信任整数(当然也可以找一些商业机构申请网站证书)
(1)使用如下命令安装mod_ssl模块。
Yum install mod_ssl.i*
(2)建立一个用于存放证书的目录
Mkdir /usr/local/httpd/.sslkey
(3)建立CA私钥,在建立CA私钥时系统会要求设置一个密码
Cd /usr/local/httpd/.sslkey
Openssl genrsa -des3 -out ca.key 1024
(4)建立CA信任证书。在建立CA信任证书时系统首先会要求输入CA私钥的密码(上一步中设置的),然后输入CA的相关信息,这些信息可根据需要输入,其中Common Name是CA的名字
Cd /usr/local/httpd/.sslkey
Openssl req -new -x509 -key ca.key -out ca.crt
(5)建立网站私钥文件,在建立网站私钥时系统会要求设置一个密码
Cd /usr/local/.sslkey
Openssl genrsa -des3 -out server.key 1024
(6)使用网站私钥建立网站证书请求文件。在建立网站证书时系统首先会要求输入网站私钥的密码(上一步中设置的),这些信息可根据需要输入(“A challenge password” “An optional company name” 不需要输入直接回车),但Common Name必须是客户端访问网站时的FQDN。
Cd /etc/httpd/.sslkey
Openssl req -new -key server.key -out server.csr
(7)使用脚本让CA签署网站的证书请求,在CA签署网站的整数请求时会要求输入CA私钥的密码。(该脚本本应在mod_ssl的源码包的pkg.contrib目录中,可以下载mod_ssl的源码包后,在其中找到sign.sh脚本使用)。
Cd /etc/httpd/.sslkey
./sign.sh server.csr
(8)为了保证证书文件安全,可修改证书存放目录的权限。
Chmod -R 400 /usr/local/httpd/./sslkey
(9)配置网站为HTTPS。
NameVirtialHost 192.168.0.10:80
<VirtualHost 192.168.0.10:443> //将网站侦听端口改为443
DocumentRoot /var/site/bbs.example.com
ServerName bbs.example.com
SSLEngine on //开启SSL
SSLCertificateFifle /usr/local/httpd/.sslkey/server.crt //指定证书文件
SSLCertificateKeyFile /usr/local/httpd/./sslkey/server.key //指定私钥文件
</VirtualHost>
在上述配置完成后,可将/usr/local/httpd/.sslkey/ca.crt(CA的信任证书)文件安装到客户端(把ca.crt复制到windows客户端后,双击后直接点击下一步安装)
3、要求客户端证书
无论是使用自颁发证书还是生成CA颁发证书的配置中,客户端在连接后,apache会将网站的证书传输给客户端,而不检查客户端是否拥有相应证书。通过如下配置可以让Apache检查客户端是否拥有相应证书(只有拥有相应证书的客户端才可以访问网站)
(1)修改网站的HTTPS配置
NameVirtialHost 192.168.0.10:80
<VirtualHost 192.168.0.10:443>
DocumentRoot /var/site/bbs.example.com
ServerName bbs.example.com
SSLEngine on
SSLCertificateFifle /usr/local/httpd/.sslkey/server.crt
SSLCertificateKeyFile /usr/local/httpd/./sslkey/server.key
SSLVerifyClient require
SSLVerifyDepth 1
</VirtualHost>
(2)使用如下命令建立客户端证书,建立客户端证书首先会要求输入网站私钥的密码,然后设置客户端证书的密码
Cd /usr/local/httpd/./sslkey
Openssl pkcsl2 -export -in server.crt -inkey server.key -out client.p12 -name “client”
(3)将生成的client.pl2安装到客户端(把client.pl2复制到windows客户端后,双击后直接单击下一步安装)。