作为 CGI 网络应用程序与 python 进行相互身份验证?

Mutual authentication with python as a CGI web app?

我想制作一个简单的 python CGI 脚本(在我的例子中由 apache 托管)读取客户端证书并记录访问脚本的人。我的问题看起来很简单,但我在 WWW 上找不到任何信息:使用 python CGI 脚本,您如何获取客户端证书?我已经有了一个有效的脚本和 SSL,所以我只是想破解客户端证书上的代码。我愿意尝试另一个网络服务器,但我想尽可能保持它的原始状态,所以没有网络框架(django 等)

如果您将 Apache HTTPD 与 mod_ssl 一起使用,那么这实际上非常简单。您可以使用此配置指令指示 mod_ssl 导出 SSL related information into environment variables

SSLOptions +StdEnvVars

然后您可以从环境变量中读取所有必需的信息,而无需任何外部依赖 - 例如,用 Perl 编写的基本 CGI 脚本显示来自客户端证书的 commonName 如下所示:

#!/usr/bin/perl

use strict;

print "Content-type: text/html\n";
print "\n";
print $ENV{"SSL_CLIENT_S_DN_CN"}

我写了一篇关于 SSL authentication in Apache HTTPD few years ago but it is only available in Slovak language. However it can be translated to English with Google Translate 的完整文章。