设为首页 收藏本站
查看: 1016|回复: 0

[经验分享] Apache SSL单双向证书认证

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-15 09:35:21 | 显示全部楼层 |阅读模式
要求目标用户(系统)安装自己的CA根证书,效果是一样的,还可以省下请权威CA签发证书的费用
下面就介绍如何创建自己的CA

1、准备工作
先在/etc/httpd/conf创建子目录:
private
certificates
其中private放的是私钥和CSR(后面会介绍),certificates里放的就是证书了
2、创建CA私钥

   icon_star.png

    openssl genrsa -out private/ca.key.pem 2048


通过这个命令,私钥就创建好了,文件名是ca.key.pem

不过基本上,看也是白看,反正我是看不懂。只知道私钥里其实有2组数字,是用来形成公钥的,最后也会包含在证书里
另外,最后的.pem扩展名,是表示该私钥用PEM编码。实际上私钥和证书都是用PEM编码的,PEM只是一种编码格式,不需要太在意。httpd可以直接处理这种编码格式,只要知道证书和私钥都有编码,只是编码是PEM还是PKCS的区别而已。就像"你好"可以用UTF-8编码,也可以用GBK编码一样,内容是不变的

3、创建CA签名请求

  

    openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=SZ/L=SZ/O=iyunv/OU=iyunv/CN=*.iyunv.com"  

生成的签名请求文件,是ca.csr
4、自己签发CA根证书

  

    openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certificates/ca.cer  


生成的ca.cer,就是最终的根证书了!这个文件非常重要,因为后续的服务端证书、客户端证书,都是用这个CA签发的,也要把它分发给客户,让他们导入到自己的浏览器或者系统中

5、把根证书从PEM编码转为PKCS编码

  

    openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certificates/ca.cer -out certificates/ca.p12  


得到的ca.p12就是转码后的CA根证书,在不能直接用ca.cer的时候,就用ca.p12代替

六、签发服务端证书

现在CA根证书和私钥都有了,就可以开始签发服务端证书了(签发请求ca.csr是过程文件,有了cer就不再需要它了,要删掉也可以)。下面的命令和签发CA证书时都差不多,但是参数上有区别

1、创建服务端私钥

  

    openssl genrsa -out private/server.key.pem 2048  


2、创建服务端证书签发请求

  

    openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=SZ/L=SZ/O=iyunv/OU=iyunv/CN=www.iyunv.com"  


和ca.csr的区别在于,这里的CN不是*.iyunv.com,而是www.iyunv.com,因为我现在是在为www.iyunv.com申请证书

3、利用CA根证书,签发服务端证书

  

    openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certificates/server.cer  


这里和前面自己签发CA证书时,参数区别就比较大了,最后得到的server.cer,就是服务端证书

七、测试单向认证

接下来用https://localhost来访问,浏览器报警:

ba212ed2-db82-3990-8a4f-e6997ea76abc.png

这里就是前面创建CSR时,输入的CN的作用,这个证书是为www.iyunv.com申请的,这里请求的地址却是localhost,不匹配所以报错。为了能用www.iyunv.com这个主机名来访问,就需要改一下/etc/hosts文件:

127.0.0.1       localhost
192.168.1.102   www.iyunv.com

然后就可以用www.iyunv.com来访问了,再试一下:https://www.iyunv.com/

这次浏览器还是告警,但是告警信息变了:

f4cd8970-5662-36ad-992d-1d4249f2088d.png

证书信息如下:

ca5043ac-f257-3943-8831-f00168054cc8.png

可以看到这个证书是由*.iyunv.com这个CA颁发的,浏览器不认识,所以不信任由这个CA签发的所有证书。接下来就需要把ca.cer导入浏览器。这里直接导入server.cer也是可以的,但是后面如果又创建一个网站比如说www2.iyunv.com,那么又不行了。所以最好的办法是直接导入CA根证书,那么后续只要是用这个根证书签发的证书,浏览器都会信任
再次访问,可以看到成功了,浏览器不告警,并且URL栏前面打了一个绿勾

7bad23b2-60a6-363b-9022-591e9170f035.png

八、配置双向认证

如果要配置服务器只允许合法的用户访问,就需要配置双向认证

配置为双向认证之后,除了服务端要发证书给客户端之外,客户端也要发客户端证书到服务端,服务端认证通过,才允许访问


Httpd代码  

    SSLCACertificateFile "/etc/httpd/conf/ca.cer"  
    SSLVerifyClient require  
    SSLVerifyDepth  10  


在单项认证的基础上,再配置以上3个参数
SSLCACertificateFile,这个意思是当客户端发来客户端证书的时候,httpd用哪个CA根证书校验它

配置好了,还不能重启,因为现在客户端证书还没做好

这里要说明一下,客户端证书是怎么来的

有2种方式:

第一种,客户端也自己CA,然后签发证书给自己。把客户端的CA根证书发过来,配置成SSLCACertificateFile。这在互联网应用里基本是不可能的,安全和管理都是问题。但是在企业应用里,还是比较常见的,双方互相交换CA根证书

第二种,就用刚才服务端的CA根证书,签发一个客户端证书,发给用户,用户每次用这个证书来发请求,像银行,支付宝等等,用的是这种方式

当然理论上其实还有一种办法,就是客户自己去找权威CA签证书,但是这个是不可能的,因为很麻烦,找CA签也非常贵
九、签发客户端证书

1、创建客户端私钥

  

    openssl genrsa -out private/client.key.pem 2048  


2、创建客户端证书签发请求

  

    openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=SZ/L=SZ/O=iyunv/OU=iyunv/CN=iyunv"  


3、利用CA根证书,签发客户端证书

  

    openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/client.csr -out certificates/client.cer  


这里和签发server.cer基本是一样的

4、把客户端证书转换成p12格式

  

    openssl pkcs12 -export -clcerts -inkey private/client.key.pem -in certificates/client.cer -out certificates/client.p12  


这步是必须的,因为稍后就需要把客户端证书导入到浏览器里,但是一般浏览器都不能直接使用PEM编码的证书

十、测试双向认证
然后再次访问https://www.iyunv.com/,结果这次不是警告,而是直接报错:

6ff294e7-2108-3bba-b776-b5f9fbc87ad7.png

接下来要把client.p12导入到浏览器里

导入前:

0145ed2a-a10c-3c33-9c28-8c5600fa2dd6.png

导入的时候会要求输入密码,这是为了避免有人偷偷拷贝了别人的客户端证书,伪装成合法用户:

c0b0c8a3-245c-314d-b14d-a68911d32cb1.png

导入后:

e0ac270a-78c2-3205-98f2-0c7e42a0d2ab.png

然后再次访问,浏览器会要求选择证书。这个步骤是通过双向认证访问网站时必须的,但是平时访问银行、支付宝的时候貌似没有,这是因为这些网站为了简化用户的操作,都会要求用户安装什么“安全控件”,控件自动选择了证书

06467b06-86aa-3b0d-b26e-d8681e19d51b.png

点击确定,访问成功!



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-38032-1-1.html 上篇帖子: CentOS 6.5 SVN 服务器搭建文档 下篇帖子: apache集成subversion 认证 证书
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表