Apache的SSL配置(2)
来源:互联网 发布:董洁的孩子是谁的 知乎 编辑:程序博客网 时间:2024/05/11 18:34
项目中有多个应用需要发布,按照以前的想法,就准备配置多个虚拟主机,实在是让人见笑了,做事情还真不能想当然,查了一些资料,现在的做法是针对某类文件或者某个文件,当用户访问这些资源得时候,要求用户出示证书,如在网银专业版登录的时候要求用户出示证书,而大众版的时候就没有这个要求,因为大众版客户开户的时候根本就不要求办理证书,同时只提供一些查询类的交易,通过SSL连接足够。
下面是使用到的一些资料的汇总,后面跟上了自己的Apache配置。
http://www.infosecurity.org.cn/forum/read.php?fid=10&tid=31&fpage=1
http://www.kreny.com/doc/apache2.0/urlmapping.html
http://developer.ccidnet.com/pub/article/c302_a230585_p1.html
九 修改httpd.conf
cd ..
vi httpd.conf
修改ServerName,为不设也可以,不过会出现警告
将SSLCertificateFile修改为/usr/local/apache/conf/ssl.crt/server.crt
将SSLCertificateKeyFile修改为/usr/local/apache/conf/ssl.key/server.key
#这是最基本的设置了,先用用试试看吧.
十 启动服务
/sbin/service iptables stop 这是要关掉防火墙了,呵呵我也不知道这样安全不安全,不过要是不关掉的话客户端将无法访问
/usr/local/apache/bin/apachectl startssl
十一 从客户端测试
从局域网找个windows电脑(LINUX也行)输入https://ip
此时将会出现一个对话框,一般第二个是对,毕竟时间都是有效的嘛.第三个是叹号那是因为访问站点与证书通用名不匹配,这需要在用openssl生成apache服务器证书时将通用名设定为ip,第一个叹号是因为没有安装CA根证书,这时将/CAroot/cacert.pem拷到客户机安装就可以了,重新打开浏览器输入https://ip,怎么什么反应也没有就进去了呢,呵呵,其实已经对服务器进行认真了,这和http://ip有本质区别.
十二 配置更多的SSL应用(这个在/usr/local/apache/htdocs/manual/mod/mod_ssl有详细文档)
1,实现对客户端的认证
修改httpd.conf
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /CAroot/cacert.pem
现在在客户端输入https://ip ,将要求出示证书
2:某些页面只允许持有证书的客户访问,其他页面允许所有人访问
修改httpd.conf,当然需要先作一些页面的准备,/usr/local/apache/htdocs/secure是我们放只允许有证书访问的目录
SSLVerifyClient none
SSLCACertificateFile conf/ssl.crt/ca.crt
<Location /secure>
SSLVerifyClient require
SSLVerifyDepth 1
</Location>
3.某些页面只允许持有某种特定证书内容的客户访问,其它页面允许所有人访问
在这里我假设允许我们局域网的人访问
SSLVerifyClient none
<Directory /usr/local/apache/htdocs/secure/area>
SSLVerifyClient require
SSLVerifyDepth 5
SSLCACertificateFile conf/ssl.crt/ca.crt
SSLCACertificatePath conf/ssl.crt
SSLOptions +FakeBasicAuth
SSLRequireSSL
SSLRequire %{SSL_CLIENT_S_DN_O} eq "ATR" and /
%{SSL_CLIENT_S_DN_OU} in {"305", "307", "309","313"}
</Directory>
4.允许局域网用户使用http访问局域网站点,但是需要外网用户使用强加密的https访问.
假设局域网用户ip为192.160.1.0-24.
下面的修改要放在HTTPS虚拟主机的外面,这样就可以同时适用于http和https访问
SSLCACertificateFile conf/ssl.crt/company-ca.crt
<Directory /usr/local/apache/htdocs>
# Outside the subarea only Intranet access is granted
Order deny,allow
Deny from all
Allow from 192.168.1.0/24
</Directory>
<Directory /usr/local/apache/htdocs/subarea>
# Inside the subarea any Intranet access is allowed
# but from the Internet only HTTPS + Strong-Cipher + Password
# or the alternative HTTPS + Strong-Cipher + Client-Certificate
# If HTTPS is used, make sure a strong cipher is used.
# Additionally allow client certs as alternative to basic auth.
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +FakeBasicAuth +StrictRequire
SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
# Force clients from the Internet to use HTTPS
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^192/.168/.1/.[0-9]+$
RewriteCond %{HTTPS} !=on
RewriteRule .* - [F]
# Allow Network Access and/or Basic Auth
Satisfy any
# Network Access Control
Order deny,allow
Deny from all
Allow 192.168.1.0/24
# HTTP Basic Authentication
AuthType basic
AuthName "Protected Intranet Area"
AuthUserFile conf/protected.passwd
Require valid-user
</Directory>
有关SSL配置apache的指令(呵呵,在/usr/local/apache/htdocs/manual/mod/mod_ssl中有更详细的解释)
1.SSLCACertificatePath
语 法:SSLCACertificatePath /to/CA/certificates
应用环境:server config ,virtual host
默认设置:none
该指令为Certificate Authority证书文件指定一个目录
2.SSLCACertificatefile
语 法:SSLCACertificatefile CA_certificate_filename
应用环境:server config ,virtual host
默认设置:none
该指令为指定一个包含Certificate Authority证书的文件
3.SSLBanCipher
语 法:SSLBanCipher Cipher
应用环境:pre-directory config(.htaccess)
使用该指令可以禁止那些想使用cipher的用户对Apache进行配置
4.SSLCacheServerPort
语 法:SSLCacheServerPort port│filename
应用环境:server config ,virtual host
该指令为全程的SSL会话缓存服务器处理过程配置TCP/IP端口或UNIX domain socket
5.SSLCacheServerPort
语 法:SSLCacheServerPath filename
应用环境:server config ,virtual host
该指令为全程的SSL会话缓存服务器的执行指令设置路径.如果你已经使用APACI配置脚本将Apache安装好了,那么缓存执行指令的文件就保存在Apache安装目录的sbin子目录中
6.SSLCertificateFile
语 法:SSLCertificateFile certificate_filename
应用环境:server config ,virtual host
该指令为一个WEB站点上的主机指定证书文件名.如果为某个虚拟主机提供SSL连通性,就需要为该虚拟主机指定一个单独的证书.
7.SSLCertificateKeyFile
语 法:SSLCertificateFile certificate_key_filename
应用环境:server config ,virtual host
该指令为证书指定一个对应的私钥文件
8 SSLEnable
语 法:SSLEnable
应用环境:server config ,virtual host
该指令用来启动SSL,该指令的使用无需参数
9 SSLDisable
语 法:SSLDisable
应用环境:server config ,virtual host
该指令用来禁止SSL,该指令的使用无需参数
10 SSLFakeBasicAuth
语 法:SSLFakeBasicAuth
应用环境:server config ,virtual host
该指令主要将用户的X509证书翻译成一个用户名,转换的用户名可用于验证
11 SSLRequireCipher
语 法:SSLRequireCipher
应用环境:pre-directory config(.htaccess)
该指令为请求密码的pre-directory列表添加一个cipher.
12 SSLogFile
语 法:SSLogFile log_filename
应用环境:server config ,virtual host
该指令使得SSL连接信息写入日志文件中.
13 SSLRequireSSL
语 法:SSLRequireSSL
应用环境:pre-directory config file ,directory
对于一个未使用的SSL连接,该命令能够禁用该连接,该指令的使用无需参数
14 SSLRequiredCiphers
语 法:SSLRequiredCiphers cipher1:cipher2:...
应用环境:server config ,virtual host,pre-directory config(.htaccess)
该指令指定一系列由冒号分隔的密码
15 SSLSessionCacheTimeout
语 法:SSLSessionCacheTimeout seconds
应用环境:server config ,virtual host
该指令为SSL会话设置缓存过期时间
16 SSLVerifyDepth
语 法:SSLVerifyDepth number
应用环境:server config ,virtual host
因为一个CA证书能够被另一个CA证书验证,所以可以形成一个CA证书链.使用该指令可指定服务器验证用户证书时可以查找多少个CA证明.
17 SSLVerifyClient
语 法:SSLVerifyClient numeric-option
应用环境:server config ,virtual host
该指令可以用来决定服务器是否需要用户证书.如果不需要用户证书,将该指令设为0,如果需要用户证书,将该指令设为2;如果用户证书需要与否可选择,则设置为1.
窗体顶端
窗体底端
要在程序中写重定向。
然后在443端口对就的虚拟主机里用<Files>..</Files>将要出示证书的文件名写在里面。
今天在www.modssl.org的FAQ上看到可以利用mod_rewrite模块实现
如下所示,把所有连接后面带SSL的都重定向到https.
RewriteEngine on
RewriteRule ^/(.*):SSL$ https://192.168.10.10/$1
自己在实际中的应用
1、在个人网银或者企业网银的首次登录页面需要让用户出示证书,可以将整个虚拟机设置为不需要用户出示证书,注释掉SSLVerifyClient require
SSLVerifyDepth 1
可以通过两个方式实现,将登录页面放置到一个特定的文件夹中,在虚拟主机中通过配置<Location /hzcb/logon>
SSLVerifyClient require
SSLVerifyDepth 1
</Location>
或者针对具体文件进行制定,使用FilesMatch或者Files都可以,推荐使用FilesMatch
<Files "/logon_pro.html">
SSLVerifyClient require
SSLVerifyDepth 1
</Files>
文件名以regulx的形式给定。参考http://httpd.apache.org/docs/2.0/mod/core.html
2、如果登录的时候要求用户出示证书,在服务器端收到的请求包头中包含有证书信息,并且在后面的请求中都会有该信息。
3、如果使用SSL服务器,就都没有这些麻烦了,可以要求SSL服务器将证书信息补充到URL上传送到后台。
- Apache的SSL配置(2)
- 配置Apache的SSL
- Windows下配置Apache的SSL服务
- Ubuntu下Apache SSL的配置方法
- wamp下 配置 apache 的ssl
- Apache Camel配置SSL的rest
- Apache Camel配置SSL的CXF
- SVN+Apache+SSL的配置说明
- Apache Ssl 配置整理
- 配置Apache支持SSL
- apache 配置 - ssl
- Apache SSL配置
- Apache服务器SSL配置
- apache 配置 ssl
- CentOS,Apache 配置SSL
- apache配置ssl
- Apache Tomcat SSL配置
- Apache服务器SSL配置
- 我的注册码解决方案
- 二分图的最佳匹配(KM 算法)
- Chapter 3(3):The Breakout Game
- 脑优化全集
- 打造通用ASP.NET数据分页控件
- Apache的SSL配置(2)
- EJB CMP/BMP
- VC中自定义消息实现
- 银行异地存取款业务收费标准(转载)
- 服务器公共组件实现 -- 继续来说主循环
- JSP内置对象之request和response
- 李开复:21 世纪最需要的 7 种人才
- Microsoft ASP.NET Futures (July 2007)中History在客户端的使用(即不必安装ASP.NET Futures)
- 开复谈工作:不要成为“紧急”的奴隶