PHP获取SSL客户端证书信息

项目需要获取到客户端的证书信息,https都配置走通了,只有证书和key才能登陆网站,但是想要做到,相应的证书只能其相应的账号登陆,这就只有在有自己的key而且知道相应的账号密码才能登陆。

之前也没做过这一块,所以查了很多案例,但是php的案例几乎没有找到,最后找大神的文章:https://cweiske.de/tagebuch/ssl-client-certificates.htm

下面说一下如何实现的。

首先SSL服务器,https等都要配置好,这里就不做详细叙述了,文章有很多。

SSL基础的virtual host配置是这样的

<span style="font-size:12px;"><VirtualHost *:443>
    ServerName bookmarks.cweiske.de
 
    LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog /var/log/apache2/access_log vcommon
 
    VirtualDocumentRoot /home/cweiske/Dev/html/hosts/bookmarks.cweiske.de
    <Directory "/home/cweiske/Dev/html/hosts/bookmarks.cweiske.de">
        AllowOverride all
    </Directory>
 
    SSLEngine On
    SSLCertificateFile /etc/ssl/private/bookmarks.cweiske.de-cacert.pem
    SSLCertificateKeyFile /etc/ssl/private/bookmarks.cweiske.de.key
 
    SSLCACertificateFile /etc/ssl/private/cacert-1and3.crt
</VirtualHost></span>


然后要让服务器能获取到客户端的证书信息SSL.conf要做如下配置,
<span style="font-size:12px;">    ...
    </Directory>
 
    SSLVerifyClient optional
    SSLVerifyDepth 1
    SSLOptions +StdEnvVars
</VirtualHost></span>

SSLVerifyClient  后面可以选择两个参数 optional和require ,optional是可以非证书验证下登陆,而require是一定要证书登陆。自己选择。

SSLVerifyDepth 是验证的深度,填1就足够了

SSLOptions +StdEnvVars 这个是最重要的,这样这是才能在web端获取客户端的信息。

在测试页编写如下代码

<?php
var_dump($_SESSION);
?>

会输出证书的所有信息,其中包括如

SSL_SERVER_S_DN_C] => 国家 [SSL_SERVER_S_DN_ST] => 省份[SSL_SERVER_S_DN_L] => 城市      等信息

 [SSL_CLIENT_S_DN_Email] => ****@*****.com 证书生成邮箱

 [SSL_CLIENT_S_DN_G] => ****证书持有人 


那么证书对应账号登陆就可以实现了,从中选出数据保存数据库,用户登陆时再调验。


ps:写的不是很详细,有什么出错的地方望大神指出。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值