`
lukejin
  • 浏览: 365541 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

客户端证书认证的实现

    博客分类:
  • Java
阅读更多

有时候我们可能需要限定特定的用户进行访问,且用户需要使用数字证书进行访问,这也就是所谓的客户端证书认证。

 

其实做客户端认证并不是很难,首先你需要一个CA证书,一般情况下你可以使用一个自签名的证书用作CA证书,然后通过这个CA证书给别人的证书请求文件进行签名,然后客户端可以将自己的证书和私钥转成PFX格式的证书进行安装。下面还是主要介绍下服务器端实现的原理吧。

 

那么一个WEB应用如果需要开启客户端证书认证的话,就需要添加一些配置。

这里以Apache和Java举例。

 

Listen 8443
<VirtualHost _default_:8443>
    JkMountCopy On
    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile conf_ext/server.crt
    SSLCertificateKeyFile conf_ext/server.key
    SSLCACertificateFile conf_ext/intranet-ca.cer
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
    SSLVerifyClient require
    SSLVerifyDepth  10
    SSLOptions +StdEnvVars
    RequestHeader unset SSL_CLIENT_S_DN_Email                                                             
    RequestHeader add SSL_CLIENT_S_DN_Email %{SSL_CLIENT_S_DN_Email}e
</VirtualHost>
 

这里是配置,将SSLVerifyClient设为require,并设置好CA证书,

这里除了使用ssl_mod外还使用了headers_mod这个模块,主要是为了将证书中的email添加到http的请求的头中。

RequestHeader unset SSL_CLIENT_S_DN_Email   

这句主要是为了防止客户端自己将Email设置到http header中,所以这里做了一次清除工作之后再将认证通过的客户端证书通过

RequestHeader add SSL_CLIENT_S_DN_Email %{SSL_CLIENT_S_DN_Email}e

将dn的email设置进去。

 

之后比如Apache将请求转发给Jboss之类的Servlet容器后,

我们可以通过Java代码获得这个email。

String email = ((HttpServletRequest)request).getHeader("SSL_CLIENT_S_DN_Email");

 至于之后你通过这个信息去做用户的认证以及登录就很简单了。

1
0
分享到:
评论

相关推荐

    httpclient访问需要客户端认证数字证书的https接口的处理方法

    在这个自定义实现中,你需要加载之前安装的客户端证书和私钥,然后将它们添加到SSLContext中。SSLContext是SSL/TLS协议的核心,负责管理密钥、证书以及握手过程。 以下是一个简单的步骤概述: 1. 使用`InstallCert...

    行业分类-设备装置-客户端证书认证方法、服务器、客户端及系统.zip

    6. **系统实现**:客户端证书认证可能涉及到操作系统、浏览器插件、特定应用程序等多种组件。例如,Windows操作系统提供了内置的证书存储和管理功能,而企业环境中可能需要配置专门的证书服务和策略。 7. **安全性*...

    使用 OpenSSL 创建生成CA 证书服务器客户端证书及密钥

    本文将详细介绍如何使用 OpenSSL 创建和管理CA证书、服务器证书和客户端证书,以实现SSL单向认证和双向认证。 首先,我们来看一下如何生成 CA(证书颁发机构)证书。CA证书是信任的根,用于签署其他证书,确保网络...

    C语言https客户端双向认证

    // 加载客户端证书和私钥 const char *cert_file = "client.crt"; const char *key_file = "client.key"; if (SSL_CTX_use_certificate_file(ctx, cert_file, SSL_FILETYPE_PEM) || SSL_CTX_use_PrivateKey_...

    java + keytool+openssl 实现批量生成客户端证书

    使用Java实现根据ca购买到的根证书 批量生产客户端需要的.bks和.cer文件,从而实现双向认证

    客户端与服务器SSL双向认证(客户端:java-服务端:java)

    - 客户端证书:类似地,也需要为客户端生成一个证书,通常会由权威的证书颁发机构(CA)签署,但在测试环境中可以自签。 2. **配置服务器**: - 配置Keystore:将服务器证书导入到Keystore文件中,设置Keystore和...

    Netty双向认证以及白名单证书验证

    4. **密钥库(Keystore)**:包含服务器的私钥和证书,以及可能的客户端证书,用于服务器验证客户端身份。 接下来,我们将使用Netty的`SslContext`类来创建SSL/TLS上下文。对于服务器端,我们可以这样配置: ```...

    实现OPC UA服务器功能,OPC UA服务器支持匿名访问、用户认证和客户证书认证

    1. 实现OPC UA服务器功能,OPC UA服务器支持匿名访问、用户认证和客户证书认证。 2. 实现opc ua用户管理功能;管理OPC UA客户端通过用户认证访问服务端所需的用户名和密码。 3. 实现OPC UA访问证书管理功能;管理OPC...

    双向认证和单向认证双向认证和单向认证

    服务器会检查客户端证书的有效性,反之亦然。这种方式通常用于保护敏感信息交换,如银行交易或企业内部网络通信,确保双方都是合法实体,防止中间人攻击。 单向认证与双向认证的区别在于安全级别和实施复杂度。单向...

    802.1X认证客户端

    这个客户端工程是为了实现802.1X认证机制而设计的,允许用户或设备在接入网络前先通过认证,确保网络安全性和访问权限的可控性。 802.1X认证过程通常涉及三个主要角色:请求者(客户端)、鉴别器(服务器)和认证...

    ONVIF客户端最新C++实现

    ONVIF支持多种认证机制,如基本认证(Basic Auth)、 Digest Auth 和TLS证书。在C++中,可以使用库如libcurl来处理HTTP请求,并集成相应的认证方式。 3. **设备信息获取**:通过WSDL(Web Services Description ...

    H3C认证客户端 H3C认证客户端

    H3C认证客户端,顾名思义,是H3C公司为用户提供的一种认证工具,主要用于与H3C的网络设备进行交互,实现用户身份验证、授权以及计费等功能。这个客户端在企业网络环境中尤其重要,因为它可以帮助企业确保网络安全,...

    HTTPS单双向认证图解+自签泛域名证书生成及使用

    双向认证与单向认证类似,但在服务端收到客户端的加密方案后,还会要求客户端提供客户端证书进行身份验证。服务端验证客户端证书的有效性后,才会继续通信。 ### 自签泛域名证书生成及使用 自签泛域名证书是为了在...

    springSecurity双模认证

    客户端证书认证是一种安全的网络身份验证方法,它使用X.509数字证书来确认用户身份。在这个过程中,服务器会要求客户端(通常是浏览器)提供一个有效的证书来证明其身份。证书包含公钥和相关身份信息,由可信的证书...

    OpenSSL创建生成CA证书、服务器、客户端证书及密钥

    本文将详细介绍如何使用OpenSSL来创建生成CA(Certificate Authority)证书、服务器证书和客户端证书以及它们对应的密钥。 首先,我们需要理解证书的基本概念。在SSL/TLS协议中,证书用于验证通信双方的身份,通常...

    https.3.客户端认证1

    为了使客户端认证工作,你需要创建自签名的CA证书、服务器证书和客户端证书。这可以通过`openssl`工具完成: 1. 创建CA私钥和根证书: ```bash openssl genrsa -out ca.key 2048 openssl req -new -x509 -days ...

    tomcat实现SSL双向认证

    本文将详细介绍如何在 Tomcat 中实现 SSL 双向认证,包括使用 JDK 的 keytool 工具创建证书、配置 Tomcat 服务器和客户端证书等。 一、SSL 双向认证的重要性 在 Web 应用程序中,安全性是非常重要的,特别是在涉及...

    CA服务器的创建和CA客户端认证过程.doc

    在信息安全领域中,数字证书认证是一个非常重要的方面,CA 服务器的创建和 CA 客户端认证过程是数字证书认证的核心部分。这篇文章将详细介绍如何创建 CA 服务器和实现 CA 客户端认证过程。 一、CA 服务器的创建 CA...

    java根证书认证实现https访问

    总结,Java根证书认证实现HTTPS访问涉及到创建自签名根证书、导入到Java信任库、编写自定义的`TrustManager`以及配置HTTPS连接。这是一项关键的安全措施,但使用时必须确保对证书管理的严谨性,以防止潜在的安全风险...

Global site tag (gtag.js) - Google Analytics