首页 > 代码库 > linux学习之路之https的实现过程
linux学习之路之https的实现过程
HTTPS的实现过程
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer:是一种加密的http协议,但是他和http是两个不同的协议。它基于tcp协议,工作在443端口上。
https的工作原理,大概是这样子的:
在实现这个过程中,需要创建CA,然后CA在为我们的apache服务器颁发证书,然后CA将自己的自签证书发送给客户端,这样客户端就可以使用这个自签证书来验证服务器端的证书的合法性了。
说明:CA颁发机构和apache服务器可以在同一台主机上面创建,这里我是将他们在两台主机上面创建的。CA所在的主机为192.168.0.104,apache所在的主机为192.168.0.103
1、创建私钥CA(这个是在单独的一台机器创建的,我将CA和apache服务器分开了)
(1)、生成一对密钥
生成私钥
(umask 770;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
(2)、生成自签证书
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.crt
-days 3655
当然这样创建完成之后,还要创建一些目录和文件,cert,crl,newcerts,index.txt,serial这些文件都位于/etc/pki/CA目录下的,因此为了防止出错,建议修改/etc/pki/tls/openssl.cnf中的参数,默认文件路径修改为dir = /etc/pki/CA
这样就完成的创建一个CA自签证书
2、创建完成之后,就可以为客户端颁发证书了(这个是在apache服务器上创建的,相当于客户端)
(1)、在客户端上面生成一对密钥(创建私钥)
(umask 077;openssl genrsa -out /etc/pki/CA/private/httpd.key 1024)
(2)、生成证书颁发请求
openssl req -new -key /etc/pki/CA/private/httpd.key -out /etc/pki/CA/httpd.csr
注意:在这个创建过程中将会出现一个交互信息界面,这个界面的内容要和在创建自签证书的内容一致。并且在填写要作用的域名时,一定要填写的是我们要访问的那一个域名,否则会出错。
(3)、将请求发给CA来签署
使用命令scp /etc/pki/CA/httpd.csr 192.168.0.104:/tmp/
openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650
将生产的证书在发给客户端(Apache服务器)
使用命令scp /tmp/httd.crt 192.168.0.103:/etc/httpd/ssl/
这样客户端就生产一个自签证书,因此在CA所在的主机上的index.txt和serial、newcerts文件都会发生改变。
虽然在apache服务器上面生成一个证书,但是想要支持https功能,必须要安装一个模块为mod_ssl。安装完成之后,就会生成一个/etc/httpd/conf.d/ssl.conf的文件,这个文件将会是httpd的主配置文件的一部分。在这个文件我们需要修改几个参数:
<VirtualHost 192.168.0.103:443> #这个就是我们要访问的虚拟主机中的域名所对应的ip地址
servername www.d.gov #指定域名
DocumentRoot ‘/www/d.gov‘ #指定网页所在的位置,这个要和apache上的DocumentRoot保持一致
SSLEngine on #这个表示开启ssl功能
在这里补充说一点,由于ssl会话是根据ip来进行的,而不是根据主机名来进行的,因此,对于有多个基于主机名的虚拟主机来说,他们其中只有一个基于主机名的虚拟主机才可以使用https功能。
3、最后将CA生成的自签证书导入到window的浏览器中即可(需要将自签证书的后缀改为.crt格式)
这样就可以使用https来访问页面了。
本文出自 “linux学习之路” 博客,谢绝转载!
linux学习之路之https的实现过程