为 CAC 卡身份验证配置 Apache HTTPD 的步骤

Posted

技术标签:

【中文标题】为 CAC 卡身份验证配置 Apache HTTPD 的步骤【英文标题】:Steps for configuring Apache HTTPD for CAC Card Authentication 【发布时间】:2018-03-27 09:08:03 【问题描述】:

我被分配了使网站使用 CAC 卡身份验证的任务。我已经使用 Apache httpd Web 服务器设置了 AWS Linux 服务器。 有没有人一步一步设置 Apache 以使用户的网络浏览器读取他们的 CAC 卡并提示他们输入密码。

【问题讨论】:

您需要设置“基于证书的身份验证”。用户端需要的只是 DoD 根证书和软件附带的 CAC 阅读器。 【参考方案1】:

CAC 身份验证与任何其他 PKI 身份验证没有什么不同(可以称为相互身份验证或客户端身份验证)。 这意味着除了浏览器验证服务器证书(检查服务器证书是否由受信任的机构颁发)之外,服务器还将要求客户端提交服务器将验证的证书。

以下是您需要的:服务器证书、该证书附带的私钥,以及带有根证书和中间 ca 证书的信任库。查看此文档以供参考:https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html

在最简单的设置中,您需要一个看起来像这样的 VirtualHost(我没有测试过这个配置。只是从上面提到的站点复制它。可能需要调整):

<VirtualHost *:443>
    ServerName www.example.com
    SSLEngine on
     # server certificate
    SSLCertificateFile "/path/to/www.example.com.cert" 
     # private key
    SSLCertificateKeyFile "/path/to/www.example.com.key" 
    SSLVerifyClient require
    SSLVerifyDepth 1
     # trust store
    SSLCACertificateFile "conf/ssl.crt/ca.crt"
</VirtualHost>

正如我所提到的,这是最基本的设置。这可能足以满足您的需要,但要使其更加健壮,您需要验证证书是否未被吊销。执行此操作的两种方法是下载证书撤销列表(这对于颁发 CAC 证书的 CA 的数量是不切实际的),或者使用 OSCP 响应程序。我个人没有使用 HTTPD 进行吊销检查(仅在 Java 世界中并以编程方式),但上述文档中有一个部分涵盖了 OCSP。同样,根据您的项目,您可能不需要它。

【讨论】:

以上是关于为 CAC 卡身份验证配置 Apache HTTPD 的步骤的主要内容,如果未能解决你的问题,请参考以下文章

使用 Vaadin 应用程序的通用访问卡 (CAC) 身份验证

如何在 Node/Express 中使用 CAC 对用户进行身份验证

Java WebApp 中的 CAC 身份验证

使用 PHP 将用户名放在 apache access_log 中,但不使用 HTTP 身份验证

如何使用通用访问卡连接到 HTTPS 服务器

配置 Apache 以接受来自 DOD CAC 的特定证书