作为 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 的完整文章。
我想制作一个简单的 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 的完整文章。