什么是CA证书
关于什么是CA证书,以及如何使用Open-SSL申请和搭建CA证书,我们在之前的文章中已经有过介绍,这里不再赘述。若有疑问,可参考之前的文章。
http://www.pojun.tech/blog/2017/09/11/linux-middle-command-1
http://xiaoshuaigege.blog.51cto.com/6217242/1965113
http://blog.csdn.net/eumenides_s/article/details/78040787
Apache Httpd 2.2 实现https加密通讯
实际生产中CA证书一般是向一些专业认证的国际机构来进行申请的。我们会模拟使用OpenSSL生成的证书,来实现Apache的安全加密通讯,这与实际生产中是类似的。
实验环境准备
准备两台虚拟主机。他们的作用和角色分别如下图所示。
650) this.width=650;" src="http://ot2trm1s2.bkt.clouddn.com/Linux/2017-09-29-linux-middle-command-6/Apache-https2.jpg" alt="实验环境准备" style="border:0px;vertical-align:middle;" />
接下来,我们分两个部分进行,在主机B上搭建CA证书环境,然后在主机A上配置证书环境。
主机B上搭建CA证书环境
CA证书环境中,私钥的名称以及存放路径,还有证书的名称和存放路径都是有一定规则的,所以,如果不明白的话,可以查看
/etc/pki/tls/openssl.cnf
文件。
1、构建私钥文件
这里我们没有采用加密的方式。
[root@localhost~]#(umask066;opensslgenrsa-out/etc/pki/CA/private/cakey.pem2048)GeneratingRSAprivatekey,2048bitlongmodulus.............................................+++.........................+++eis65537(0x10001)
2、根据私钥文件,创建自签名的根CA证书
证书的名字必须是cacert.pem ,而且存放路径必须是
/etc/pki/CA/cacert.pem
[root@localhost~]#opensslreq-new-x509-key/etc/pki/CA/private/cakey.pem-days7300-out/etc/pki/CA/cacert.pemYouareabouttobeaskedtoenterinformationthatwillbeincorporatedintoyourcertificaterequest.WhatyouareabouttoenteriswhatiscalledaDistinguishedNameoraDN.TherearequiteafewfieldsbutyoucanleavesomeblankForsomefieldstherewillbeadefaultvalue,Ifyouenter‘.‘,thefieldwillbeleftblank.-----CountryName(2lettercode)[XX]:CNStateorProvinceName(fullname)[]:shandongLocalityName(eg,city)[DefaultCity]:qingdaoOrganizationName(eg,company)[DefaultCompanyLtd]:pojun.techOrganizationalUnitName(eg,section)[]:OptCommonName(eg,yournameoryourserver‘shostname)[]:ca.pojun.techEmailAddress[]:
此时如果我们去查看证书的内容话,是可以查看我们刚刚指定的这些信息的。
[root@localhost~]#opensslx509-in/etc/pki/CA/cacert.pem-noout-textCertificate:Data:Version:3(0x2)SerialNumber:17076170100312404196(0xecfabe3b994470e4)SignatureAlgorithm:sha256WithRSAEncryptionIssuer:C=CN,ST=shandong,L=qingdao,O=pojun.tech,OU=Opt,CN=ca.pojun.techValidityNotBefore:Sep2903:40:102017GMTNotAfter:Sep2403:40:102037GMTSubject:C=CN,ST=shandong,L=qingdao,O=pojun.tech,OU=Opt,CN=ca.pojun.tech*******************省略了公钥和签名信息*************************
3、创建颁发证书必须的两个文件
如果不提前创建这两个文件,那么在生成证书的过程中会出现错误。
我们将文件创建在配置文件中指定的路径下面。
生成证书索引数据库文件
touch /etc/pki/CA/index.txt
指定第一个颁发证书的序列号
echo 01 > /etc/pki/CA/serial
在主机A上申请证书
1、首先安装mod_ssl动态模块
首先在主机A上安装mod_ssl 模块 ,然后我们来查看一下这个模块里面都包含哪些内容
[root@centos6~]$rpm-qlmod_ssl/etc/httpd/conf.d/ssl.conf#配置文件/usr/lib64/httpd/modules/mod_ssl.so#Apache动态模块/var/cache/mod_ssl/var/cache/mod_ssl/scache.dir/var/cache/mod_ssl/scache.pag/var/cache/mod_ssl/scache.sem
打开
/etc/httpd/conf.d/ssl.conf
,就会发现,mod_ssl已经帮助我们添加了证书文件,只不过这个证书文件没有任何的意义,我们接下来就是要申请证书,并把他们替换掉。
650) this.width=650;" src="http://ot2trm1s2.bkt.clouddn.com/Linux/2017-09-29-linux-middle-command-6/mod_ssl.png" alt="mod_ss" style="border:0px;vertical-align:middle;" />
2、生成私钥文件
因为私钥文件是给Web服务器来使用的,所以私钥文件可以存放在web服务器的配置目录下。这样方便管理 。
#首先创建一个目录用来管理生成的私钥和证书请求文件,可根据自己的实际情况而定[root@centos6~]$mkdir/etc/httpd/conf.d/ssl#生成自己的私钥文件[root@centos6~]$(umask066;opensslgenrsa-out/etc/httpd/conf.d/ssl/httpd.key1024)GeneratingRSAprivatekey,1024bitlongmodulus.++++++...++++++eis65537(0x10001)
3、生成证书请求文件
生成自己的证书请求文件,这里的请求文件是要传给主机B(根CA)来申请证书的。其中的域名采用了范域名解析。
也就是说,当我们把所有的环境配置结束之后,就应该使用https://*.a.com的方式来访问网站,这样话,服务器就会自动采用加密的方式来处理我们的请求。
#生成自己的证书申请文件,以.csr结尾的文件。[root@centos6ssl]$opensslreq-new-key/etc/httpd/conf.d/ssl/httpd.key-out/etc/httpd/conf.d/ssl/httpd.csrYouareabouttobeaskedtoenterinformationthatwillbeincorporatedintoyourcertificaterequest.WhatyouareabouttoenteriswhatiscalledaDistinguishedNameoraDN.TherearequiteafewfieldsbutyoucanleavesomeblankForsomefieldstherewillbeadefaultvalue,Ifyouenter‘.‘,thefieldwillbeleftblank.-----CountryName(2lettercode)[XX]:CNStateorProvinceName(fullname)[]:shandongLocalityName(eg,city)[DefaultCity]:yantaiOrganizationName(eg,company)[DefaultCompanyLtd]:pojun.techOrganizationalUnitName(eg,section)[]:optCommonName(eg,yournameoryourserver‘shostname)[]:*.a.comEmailAddress[]:Pleaseenterthefollowing‘extra‘attributestobesentwithyourcertificaterequestAchallengepassword[]:Anoptionalcompanyname[]:
4、将证书请求文件发送给证书颁发机构(主机B)
我们需要将证书请求文件发送给证书颁发机构。
[root@centos6ssl]$scp/etc/httpd/conf.d/ssl/httpd.csr172.18.2.77:/etc/pki/CA/root@172.18.2.77‘spassword:httpd.csr100%6470.6KB/s00:00
5、在根CA(主机B)颁发证书
我们需要将证书请求文件发送给证书颁发机构。
#根据主机A提交的证书申请内容,生成证书[root@localhost~]#opensslca-in/etc/pki/CA/httpd.csr-out/etc/pki/CA/certs/httpd.crt-days365*****************中间省略了输出信息***********************
将生成的证书文件颁发给申请者(主机A)
#前面我们说过,证书文件都存放在/etc/httpd/conf.d/ssl/目录下[root@localhost~]#scp/etc/pki/CA/certs/httpd.crt172.18.2.66:/etc/httpd/conf.d/ssl/Theauthenticityofhost‘172.18.2.66(172.18.2.66)‘can‘tbeestablished.RSAkeyfingerprintis00:c0:e5:a6:39:e9:a7:bb:1b:f4:ab:0d:75:9b:38:b0.Areyousureyouwanttocontinueconnecting(yes/no)?yesWarning:Permanentlyadded‘172.18.2.66‘(RSA)tothelistofknownhosts.root@172.18.2.66‘spassword:httpd.crt100%37143.6KB/s00:00
同时将根CA的证书也发送给Web服务器(主机A)。这一点很重要。
[root@localhost~]#scp/etc/pki/CA/cacert.pem172.18.2.66:/etc/httpd/conf.d/ssl/root@172.18.2.66‘spassword:cacert.pem100%13341.3KB/s00:00
在主机A上配置Web服务器
首先配置Web服务器的私钥文件和证书文件,编辑”/etc/httpd/conf.d/ssl.conf”
650) this.width=650;" src="http://ot2trm1s2.bkt.clouddn.com/Linux/2017-09-29-linux-middle-command-6/Apache-ssl2.png" alt="Apache-ssl" style="border:0px;vertical-align:middle;" />
然后将根CA的证书路径,配置在配置文件中。
650) this.width=650;" src="http://ot2trm1s2.bkt.clouddn.com/Linux/2017-09-29-linux-middle-command-6/Apache-cacert.png" alt="Apache-cacert" style="border:0px;vertical-align:middle;" />
配置FQDN
关于在Apache httpd 2.2 上如何配置FQDN,已经在我的另外一片文章中介绍过了,如果有疑问的话,可移步下列站点查看
http://www.pojun.tech/blog/2017/09/27/linux-middle-command-5
http://xiaoshuaigege.blog.51cto.com/blog/6217242/1969618
http://blog.csdn.net/eumenides_s/article/details/78130561
我们这里直接给出配置的内容,该配置文件位于
/etc/httpd/conf.d/
路径下。
[root@centos6conf.d]$catca.conf#这句话一定要加上NameVirtualHost*:80<VirtualHost*:80>ServerNamewww.a.comDocumentRoot"/var/www/html"</VirtualHost><VirtualHost*:80>ServerNamemail.a.comDocumentRoot"/var/www/html"</VirtualHost>
测试实验结果
经过了上面的配置之后,我们已经实现了Apache https 的加密通讯,下面我们来验证一下实验的结果。
我们需要一台浏览器来访问一下 我们在FQDN中配置的网络地址。www.a.coom
和www.b.com
注意:这里应该需要配置一下DNS。我们这里偷个懒,因为我使用的windows主机上的浏览器,所以,我们简要的修改下
C:\Windows\System32\drivers\etc\hosts
这个文件,并在文件的末尾添加一行。
#添加这样一句解析。172.18.2.66www.a.commail.a.com
添加上面的解析之后,我们就可以通过浏览器访问我们的web服务了(建议使用IE浏览器)。
650) this.width=650;" src="http://ot2trm1s2.bkt.clouddn.com/Linux/2017-09-29-linux-middle-command-6/apache_result1.png" alt="result1" style="border:0px;vertical-align:middle;" />
650) this.width=650;" src="http://ot2trm1s2.bkt.clouddn.com/Linux/2017-09-29-linux-middle-command-6/apache_result2.png" alt="result2" style="border:0px;vertical-align:middle;" />
通过IE浏览器可以查看一下我们的证书路径。注意:根证书是需要安装的,如果不明白,可以查阅资料。
650) this.width=650;" src="http://ot2trm1s2.bkt.clouddn.com/Linux/2017-09-29-linux-middle-command-6/Apache-ca-result.png" alt="证书路径" style="border:0px;vertical-align:middle;" />
综上,经历了这么多的配置,我们整体就会明白,https 通讯加密,以及证书申请到底是怎么回事。在实际生产中也可以结合此案例来进行操作。若有疑问,欢迎留言。
个人博客地址:http://www.pojun.tech/欢迎访问
本文出自 “救火队长” 博客,请务必保留此出处http://xiaoshuaigege.blog.51cto.com/6217242/1969749
Apache Httpd 2.2 配置CA证书,实现Https加密通讯
原文地址:http://xiaoshuaigege.blog.51cto.com/6217242/1969749