分类目录归档:Linux

在Tomcat或Apache中配置可选的客户端证书验证

生产环境中为加强安全一般采用SSL通讯,实践中为了保证客户端身份,也可以使用客户端证书,如果客户端没有安装证书,给出相应的指引。本文给出的是如何在Tomcat或者Apache中配置可选的客户端证书验证。

在Apache + mod_jk + Tomcat的部署架构下,需要把SSL相关配置放在Apache的配置文件中,配置文件一般如下:


	SSLEngine on
	SSLProtocol all -SSLv2
	SSLCertificateFile /data/web/keys/your.crt #证书颁发机构颁给的证书文件如StartSSL的免费证书
	SSLCertificateKeyFile /data/web/keys/decrypted.key #解密后的私钥
	SSLCertificateChainFile /data/web/keys/ca.crt #证书颁发机构的中间证书链
	SSLVerifyClient none
	SSLCACertificateFile /data/web/keys/your_trust_ca.crt #你自己的CA,由这个CA签发的客户端证书会被服务器认可。不需要购买或者证书提供商的证书。
	DocumentRoot /var/www/dummy
	ServerName myserver.cn
	ServerAlias www.myserver.cn
	ErrorLog "logs/ssl_error_log"
	CustomLog "logs/ssl_access_log" common
	JkMount /* worker1  #预先定义好的worker
	#经测试Location方式指定只对指定页面要求客户端验证的设置不被IE8支持,放弃
	#SSLVerifyClient optional表示即使没有客户端证书也允许打开页面,需要有应用来限制没有证书的处理方式。
	#
		SSLVerifyClient optional
		SSLVerifyDepth 1
	#

另外需要在Apache配置文件中加上

SSLOptions +StdEnvVars +ExportCertData

 以便Apache可以把证书传递给Tomcat。

另一种情况,部署架构只有Tomcat的话,配置文件需要注意的部分如下:

    

Setting property ‘clientAuth’ to ‘false’ did not find a matching property.

解決方式就是將原本server.xml中的
<Connector port=”443″ protocol=”HTTP/1.1″ SSLEnabled=”true” maxThreads=”150″ scheme=”https” secure=”true”
clientAuth=”false” sslProtocol=”TLS”
keystoreFile=”your jks file”
keyAlias=”your alias name”
keystorePass=”your password” />
protocol=”HTTP/1.1″

替換成

protocol=”org.apache.coyote.http11.Http11Protocol”

修正後的server.xml如下
<Connector port=”443″ protocol=”org.apache.coyote.http11.Http11Protocol” SSLEnabled=”true” maxThreads=”150″ scheme=”https” secure=”true”
clientAuth=”false” sslProtocol=”TLS”
keystoreFile=”your jks file”
keyAlias=”your alias name”
keystorePass=”your password” />
然後再重新啟動Tomcat,服務就可以順利啟動了。