我正在使用Drupal 7在Archlinux上运行Apache 2.4。我正在使用PKI_authentication模块对drupal进行智能卡身份验证。 注意:这只是我在家中使用的测试设置,试图弄清楚如何使这项工作。除了在Windows 2008 R2上运行外,生产设置基本相同。
我还将Apache设置作为使用proxypass的两个内部服务器的反向代理。我试图限制只有授权用户访问内部服务器。最初我尝试使用“SSLVerifyClient require”,它不限制对授权用户的访问,但至少要求他们使用公认的智能卡。
问题是两个内部服务器在它们之间来回引用浏览器,甚至打开内部其他服务器的帧。每次浏览器重定向到另一台服务器时,用户都必须重新进行身份验证。
由于drupal使用会话cookie并将此cookie的值存储在sql数据库中,但我可以使用mod_session_dbd来验证用户是否已经过身份验证。但是mod_session_dbd上的文档非常无用。
在继续之前,如果有人可以提出更好的方法来实现上述目标,我将非常感激。我宁愿这样做而不必安装任何新软件,因为批准过程相当漫长。
Apache的mod_session_dbd文档(除了混合数据库名称和会话名称)在“DBD配置”块中给出了一个示例:
DBDPrepareSQL“更新会话设置值=%s,到期=%lld,密钥=%s其中key =%s”updatesession
但它没有描述这些变量是什么。基于名称,它们看起来像是指'key','value',&来自cookie的'到期'。但这没有任何意义,因为访问该网站的每个人都将拥有一个完全相同的“密钥”(cookie的名称)的cookie,因此我无法仅使用cookie名称更新特定会话,除非这是预期的将每个打开的会话更新为与当前用户相同的“值”等?
我正在使用基本库存Drupal设置,但有以下更改(不起作用):
在httpd.conf中:
LoadModule session_module modules/mod_session.so
LoadModule session_cookie_module modules/mod_session_cookie.so
LoadModule dbd_module modules/mod_dbd.so
LoadModule session_dbd_module modules/mod_session_dbd.so
DBDriver sqlite3
DBDParams "/srv/www/drupalDB/drupal.db"
DBDPrepareSQL "select uid from sessions where ssid = %s" selectsession
#uis is the userid of current user and ssid is the value in the cookie.
#Not sure what selectsession is expected to return.
#also tried DBDPrepareSQL "select ssid from sessions where ssid = %s" selectsession, but that didn't work either
#Not using deletesession, insertsession, etc at this time since I don't want to mess up the database
<Location /site1>
# SSLRequireSSL
AuthType Basic
AuthName "Internal"
Session On
SessionDBDCookieName SSESS0ea0798a41d3d84e7bbc0af79a07cd87
SessionDBDPerUser On
SessionDBDSelectLabel selectsession
Require valid-user
ErrorDocument 401 /sites/default/misc/pki_authentication/index.php
</Location>
ProxyPass /site1 http://192.168.0.3/site1
ProxyPassReverse /site1 http://192.168.0.3/site1
我很感激任何帮助。感谢。
答案 0 :(得分:0)
我不确定你是否可以在内部服务器上执行此操作 - 这取决于它们是什么 - 但是使用JBOSS和Tomcat,我们设置了粘性,然后在JBOSS / Tomcat配置中,我们给它们一个路线名称。这可以防止平衡器来回交换节点并始终强制重新进行身份验证。
在Apache(httpd.conf)中:
# ***** HA CONFIGURATION FOR JBOSS & TOMCAT WEB APPLICATIONS *** SSL BACKEND
SSLProxyEngine On
SSLProxyVerify On
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyVerifyDepth 2
SSLProxyCACertificateFile /path/to/server-ca.crt
ProxyRequests Off
ProxyPass / balancer://mycluster/ stickysession=JSESSIONID
ProxyPassReverse / balancer://mycluster/
<Proxy balancer://mycluster>
BalancerMember https://XXX.XX.XXX.XX:XXX1 route=node1 loadfactor=1 ping=10 ttl=600
BalancerMember https://XXX.XX.XXX.XX:XXX2 route=node2 loadfactor=1 ping=10 ttl=600
</Proxy>
ProxyTimeout 300
ProxyStatus On
然后在Tomcat中:(在辅助服务器上它的节点2)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
我现在无法访问JBOSS配置,但他们也做了类似的事情。