当前位置: 首页 > 知识库问答 >
问题:

在Apache Web服务器上配置双向SSL客户端身份验证

桓信鸥
2023-03-14

想得到一些关于设置简单的双向ApacheSSL的建议。

我们使用openSSL创建了一个密钥文件和csr请求。然后,我们将其提交给CA,并收到一个crt文件与CA的crt文件一起返回。

我们已经配置了ApacheHTTP。conf文件,并在加载mod_ssl模块后添加了以下参数。

开启SSLEngine

SSLCACertificateFile/local/fast/fcHome/deployment/apache01/conf/ssl。crt/ca.crt-与证书一起接收的ca根证书

/local/fast/fcHome/deployment/apache01/conf/ssl.crt/server.crt服务器从CA接收的crt文件

SSLCertificateKeyFile/local/fast/fcHome/deployment/apache01/conf/ssl。密钥/服务器。密钥-用于生成csr的密钥文件

SSLVerifyClient需要

SSLVerifyDepth 10

然后,我们有一个客户端也在使用由同一CA签名的证书试图连接到https服务。客户端在连接时出现SSL握手错误。

apache错误日志显示以下内容:

ssl_引擎_内核。c(1884):OpenSSL:Write:SSLv3读取客户端证书B ssl\u引擎\u内核。c(1903):OpenSSL:Exit:SSLv3读取客户端证书B ssl_引擎_内核中的错误。c(1903):OpenSSL:Exit:SSLv3读取客户端证书B中的错误SSL库错误:336105671错误:140890C7:SSL例程:SSL3_获取_客户端_证书:对等方未返回服务器未知的证书进行验证?

我似乎不明白这是为什么。是否有可能即使客户端证书由VerSign签名,但它与服务器的CA. crt文件不匹配?

任何帮助都将不胜感激

共有2个答案

司徒骞尧
2023-03-14

客户端必须提供客户端证书才能连接到服务器。

例如,在python中:

import requests

cert = (client_cert_file_path, client_key_file_path)

resp = requests.get(url, cert=cert, verify=False)
翟淮晨
2023-03-14

SSLCACertificateFile必须包含客户端的认证机构证书和任何中间证书文件,所有证书都连接在一起。

您还缺少SSL证书链接文件,该文件必须指向包含服务器认证机构证书和任何中间证书文件的文件,所有这些文件都连接在一起。

显然,客户端(浏览器)必须安装自己的客户端证书。

注意:从2.4.8版本开始,作为apache官方文档,SSLCertificateChainFile已经过时(感谢ezra-s的评论)。现在可以将服务器证书和CA中间证书直接连接到SSLCertificateFile中。

 类似资料:
  • 问题内容: 我正在一个需要客户端和服务器证书认证的Android应用程序上工作。我创建了一个SSLClient类,该类在常规的台式机Java SE 6上运行良好。我将其移至Android项目中,并收到以下错误:“找不到KeyStore JKS实现”。 我已经在网上看了一下,似乎有可能Android上不支持Java Keystore(太棒了!),但是我感觉还不止如此,因为我发现的示例代码都没有类似于

  • 我试图设置2方式ssl身份验证。我的要求是经纪人应该只认证特定的客户。 我的组织有一个CA,它发行pkcs12格式的所有证书。我遵循的步骤如下。 获取代理的证书,并在代理密钥库中配置它 当我运行代理和客户端时,我希望代理验证客户端并建立ssl连接。但是下面的错误被抛出。 当我用只包含CA证书的信任存储文件替换 /etc/pki/java/cacerts代理信任存储时,它工作得很好。但是它将验证任何

  • 我已经在Netty中尝试了双向SSL身份验证 但这个例子不再显示任何信息,只是一个404未找到。我在这里找到了一些帮助: https://github.com/code4craft/netty-learning/blob/master/netty-3.7/src/main/java/org/jboss/netty/example/securechat/SecureChatSslContextFac

  • 我已经被困了几天了,我已经检查了几个答案(这个,这个,这个,这个,这个,这个,这个),但我一直无法解决我的问题。我是SSL的新手,在我的组织中似乎没有其他人这样做过。 背景 目前,我们在零售商网点中有一组终端通过SSL连接到服务器。该连接包括客户端身份验证。我的组织作为CA,并已发布cacert。crt证书,并使用它为服务器和所有客户端终端签署一个证书。终端目前可以与服务器正常工作,但我无法从支持

  • 任务:将Kerberos active directory身份验证添加到不安全的报告和数据操作桌面应用程序。此应用程序是。。。 用Stackless Python 2.7编写 使用Twisted进行客户端-服务器交互 客户端编译为exe并在Windows上运行 服务器在Linux(红帽)上运行 目前,我们从用户帐户中提取Windows网络ID(登录名)并传递到服务器,服务器会查找用户配置为具有的权

  • 我知道这个话题已经出现了很多次,而且已经有很多票了。但是在看了数百张票和页面后,我没有找到必要的架构信息。 我计划的是一个简单的SPA(Angular)-REST后端(单独的.NETCore2.1WebAPI)设置。我有keydepot通过OpenId Connect提供身份验证。我正在为Angular使用一个OpenId包来与Key斗篷通信,以获取id和访问令牌。 我想要的是Angular客户端