openssl apache modssl安装配置调试过程.docx
《openssl apache modssl安装配置调试过程.docx》由会员分享,可在线阅读,更多相关《openssl apache modssl安装配置调试过程.docx(28页珍藏版)》请在冰点文库上搜索。
opensslapachemodssl安装配置调试过程
openssl中ssl.conf文件中支持apachehttps的设定:
RewriteEngineOn
RewriteCond%{SERVER_PORT}!
^443$
RewriteRule^(horde)https:
//%{HTTP_HOST}/horde/[L]
RewriteRule^/(horde)https:
//%{HTTP_HOST}/horde/[L]
RewriteRule^(phpmyadmin)https:
//%{HTTP_HOST}/phpmyadmin/[L]
RewriteRule^/(phpmyadmin)https:
//%{HTTP_HOST}/phpmyadmin/[L]
RewriteRule^(acid)https:
//%{HTTP_HOST}/acid/[L]
RewriteRule^/(acid)https:
//%{HTTP_HOST}/acid/[L]
在apache中的httpd.conf文件中增加listen443
利用rewrite功能,在虚拟主机下加如下语句:
RewriteEngineon
RewriteCond%{HTTPS}!
on[NC]
RewriteRule^/erayt/ssl/(.*):
443/erayt/ssl/$1[L,R]
这样就可强制用https访问ssl目录下的所有网页.
一下载
1,从openssl.org下载openssl到/usr/local
2.从apache.org下载apache到/usr/local
3.从modssl.org下载mod_ssl到/usr/local
二解压缩
cd/usr/local
tarzxvfopenssl-0.9.7e.tar.gz
tarzxvfmod_ssl-2.8.22-1.3.33.tar.gz
tarzxvfapache-1.3.33.tar.gz
三更改一下名字
mvopenssl-0.9.7eopenssl
mvmod_ssl-2.8.22-1.3.33mod_ssl
mvapache-1.3.33apache
四编译openssl
cdopenssl
./config--prefix=/usr/local/openssl
make
makeinstall
五编译mod_ssl
cd../mod_ssl
./configure--with-apache=../apache
六编译apache
SSL_BASE=../openssl./configure--enable-module=ssl
make(易出错)
makecertificate
makeinstall
到这里为止,已经把准备工作做好了,假如按照前面的步骤来的话应该是没有问题的.但是有几次我出现了openssl不能用,apache出怪毛病的问题,呵呵最好的办法就是删除了重新安装
七建立自己的CA
cd/
mkdirCAroot 建立自己的CA目录,我不知道这样为CA建一个目录好不好
cdCAroot
cp/usr/local/openssl/ssl/f./f 将CA配置文件拷过来
vif 修改配置文件中的dir,将./demoCA修改为/CAroot
mkdirnewcerts
mkdircerts
mkdircrl
mkdirprivate
viindex.txt 可以不写数据,直接:
wq
viserial 写入00,然后:
wq
vi./private/.rand 写入两行随机数,然后:
wq
#呵呵,上面所作的这些全是根据f来的
opensslreq-new-x509-newkeyrsa:
1024-keyout./private/cakey.pem-outcacert.pem为CA生成密钥和证书
八为apache生成密钥和证书
cd/usr/local/apache/conf/ssl.crt
opensslreq-new-newkeyrsa:
1024-keyout../ssl.key/server.key-out../ssl.csr/server.csr生成证书请求和密钥
opensslca-in../ssl.csr/server.csr-outserver.crt-config/CAroot/f 用CA私钥签名证书请求
#现在已经得到了服务器的证书和私钥
九修改httpd.conf
cd..
vihttpd.conf
将ServerName更改为sage不设也可以,不过会出现警告
将SSLCertificateFile修改为/usr/local/apache/conf/ssl.crt/server.crt
将SSLCertificateKeyFile修改为/usr/local/apache/conf/ssl.key/server.key
#这是最基本的设置了,先用用试试看吧.
十启动服务
/sbin/serviceiptablesstop 这是要关掉防火墙了,呵呵我也不知道这样安全不安全,不过要是不关掉的话客户端将无法访问
/usr/local/apache/bin/apachectlstartssl
十一从客户端测试
从局域网找个windows电脑(LINUX也行)输入https:
//192.168.10.10/记住是https,要使http就直接不验证就通过了
此时将会出现一个对话框,一般第二个是对,毕竟时间都是有效的嘛.第三个是叹号那是因为访问站点与证书通用名不匹配,这需要在用openssl生成apache服务器证书时将通用名设定为192.168.10.10,第一个叹号是因为没有安装CA根证书,这时将/CAroot/cacert.pem拷到客户机安装就可以了,重新打开浏览器输入https:
//192.168.10.10/,怎么什么反应也没有就进去了呢,呵呵,其实已经对服务器进行认真了,这和http:
//192.168.10.10/有本质区别.
十二配置更多的SSL应用(这个在/usr/local/apache/htdocs/manual/mod/mod_ssl有详细文档)
1,实现对客户端的认证
修改httpd.conf
SSLVerifyClientrequire
SSLVerifyDepth1
SSLCACertificateFile/CAroot/cacert.pem
现在在客户端输入https:
//192.168.10.10/,将要求出示证书,那现在就生成一个客户PKCS格式证书吧
cd/usr/local/apache/conf/ssl.crt
opensslreq-new-newkeyrsa:
1024-keyout../ssl.key/client.key-out../ssl.csr/client.csr 生成证书请求和密钥
opensslca-in../ssl.csr/client.csr-outclient.crt-config/CAroot/f 用CA私钥签名证书请求
opensslpkcs12-export-clclient-inkey../ssl.key/client.key-inclient.crt-out/home/share/client.p12
#/home/share目录是samba服务器的共享目录,一般是将client.p12放在USBkey中,为了方便所以直接共享了.
在客户端上安装client.p12,呵呵这样就可以实现双方的认证了,双方通信也实现了SSL.(tobecontinuing)
2:
某些页面只允许持有证书的客户访问,其他页面允许所有人访问
修改httpd.conf,当然需要先作一些页面的准备,/usr/local/apache/htdocs/secure是我们放只允许有证书访问的目录
SSLVerifyClientnone
SSLCACertificateFileconf/ssl.crt/ca.crt
SSLVerifyClientrequire
SSLVerifyDepth1
3.某些页面只允许持有某种特定证书内容的客户访问,其它页面允许所有人访问
在这里我假设允许我们局域网的人访问
SSLVerifyClient none
SSLVerifyClient require
SSLVerifyDepth 5
SSLCACertificateFileconf/ssl.crt/ca.crt
SSLCACertificatePathconf/ssl.crt
SSLOptions +FakeBasicAuth
SSLRequireSSL
SSLRequire %{SSL_CLIENT_S_DN_O}eq"ATR"and\
%{SSL_CLIENT_S_DN_OU}in{"305","307","309","313"}
4.允许局域网用户使用http访问局域网站点,但是需要外网用户使用强加密的https访问.
假设局域网用户ip为192.160.1.0-24.
下面的修改要放在HTTPS虚拟主机的外面,这样就可以同时适用于http和https访问
SSLCACertificateFileconf/ssl.crt/company-ca.crt
# OutsidethesubareaonlyIntranetaccessisgranted
Order deny,allow
Deny fromall
Allow from192.168.1.0/24
# InsidethesubareaanyIntranetaccessisallowed
# butfromtheInternetonlyHTTPS+Strong-Cipher+Password
# orthealternativeHTTPS+Strong-Cipher+Client-Certificate
# IfHTTPSisused,makesureastrongcipherisused.
# Additionallyallowclientcertsasalternativetobasicauth.
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +FakeBasicAuth+StrictRequire
SSLRequire %{SSL_CIPHER_USEKEYSIZE}>=128
# ForceclientsfromtheInternettouseHTTPS
RewriteEngine on
RewriteCond %{REMOTE_ADDR}!
^192\.168\.1\.[0-9]+$
RewriteCond %{HTTPS}!
=on
RewriteRule .*-[F]
# AllowNetworkAccessand/orBasicAuth
Satisfy any
# NetworkAccessControl
Order deny,allow
Deny fromall
Allow 192.168.1.0/24
# HTTPBasicAuthentication
AuthType basic
AuthName "ProtectedIntranetArea"
AuthUserFile conf/protected.passwd
Require valid-user
有关SSL配置apache的指令(呵呵,在/usr/local/apache/htdocs/manual/mod/mod_ssl中有更详细的解释)
1.SSLCACertificatePath
语 法:
SSLCACertificatePath/to/CA/certificates
应用环境:
serverconfig,virtualhost
默认设置:
none
该指令为CertificateAuthority证书文件指定一个目录
2.SSLCACertificatefile
语 法:
SSLCACertificatefileCA_certificate_filename
应用环境:
serverconfig,virtualhost
默认设置:
none
该指令为指定一个包含CertificateAuthority证书的文件
3.SSLBanCipher
语 法:
SSLBanCipherCipher
应用环境:
pre-directoryconfig(.htaccess)
使用该指令可以禁止那些想使用cipher的用户对Apache进行配置
4.SSLCacheServerPort
语 法:
SSLCacheServerPortport│filename
应用环境:
serverconfig,virtualhost
该指令为全程的SSL会话缓存服务器处理过程配置TCP/IP端口或UNIXdomainsocket
5.SSLCacheServerPort
语 法:
SSLCacheServerPathfilename
应用环境:
serverconfig,virtualhost
该指令为全程的SSL会话缓存服务器的执行指令设置路径.如果你已经使用APACI配置脚本将Apache安装好了,那么缓存执行指令的文件就保存在Apache安装目录的sbin子目录中
6.SSLCertificateFile
语 法:
SSLCertificateFilecertificate_filename
应用环境:
serverconfig,virtualhost
该指令为一个WEB站点上的主机指定证书文件名.如果为某个虚拟主机提供SSL连通性,就需要为该虚拟主机指定一个单独的证书.
7.SSLCertificateKeyFile
语 法:
SSLCertificateFilecertificate_key_filename
应用环境:
serverconfig,virtualhost
该指令为证书指定一个对应的私钥文件
8SSLEnable
语 法:
SSLEnable
应用环境:
serverconfig,virtualhost
该指令用来启动SSL,该指令的使用无需参数
9SSLDisable
语 法:
SSLDisable
应用环境:
serverconfig,virtualhost
该指令用来禁止SSL,该指令的使用无需参数
10SSLFakeBasicAuth
语 法:
SSLFakeBasicAuth
应用环境:
serverconfig,virtualhost
该指令主要将用户的X509证书翻译成一个用户名,转换的用户名可用于验证
11SSLRequireCipher
语 法:
SSLRequireCipher
应用环境:
pre-directoryconfig(.htaccess)
该指令为请求密码的pre-directory列表添加一个cipher.
12SSLogFile
语 法:
SSLogFilelog_filename
应用环境:
serverconfig,virtualhost
该指令使得SSL连接信息写入日志文件中.
13SSLRequireSSL
语 法:
SSLRequireSSL
应用环境:
pre-directoryconfigfile,directory
对于一个未使用的SSL连接,该命令能够禁用该连接,该指令的使用无需参数
14SSLRequiredCiphers
语 法:
SSLRequiredCipherscipher1:
cipher2:
...
应用环境:
serverconfig,virtualhost,pre-directoryconfig(.htaccess)
该指令指定一系列由冒号分隔的密码
15SSLSessionCacheTimeout
语 法:
SSLSessionCacheTimeoutseconds
应用环境:
serverconfig,virtualhost
该指令为SSL会话设置缓存过期时间
16SSLVerifyDepth
语 法:
SSLVerifyDepthnumber
应用环境:
serverconfig,virtualhost
因为一个CA证书能够被另一个CA证书验证,所以可以形成一个CA证书链.使用该指令可指定服务器验证用户证书时可以查找多少个CA证明.
17SSLVerifyClient
语 法:
SSLVerifyClientnumeric-option
应用环境:
serverconfig,virtualhost
该指令可以用来决定服务器是否需要用户证书.如果不需要用户证书,将该指令设为0,如果需要用户证书,将该指令设为2;如果用户证书需要与否可选择,则设置为1.
今天在modssl.org的FAQ上看到可以利用mod_rewrite模块实现
如下所示,把所有连接后面带SSL的都重定向到https.
RewriteEngineon
RewriteRule ^/(.*):
SSL$ https:
//192.168.10.10/$1
利用rewrite功能,在虚拟主机下加如下语句:
RewriteEngineon
RewriteCond%{HTTPS}!
on[NC]
RewriteRule^/erayt/ssl/(.*):
443/erayt/ssl/$1[L,R]
这样就可强制用https访问ssl目录下的所有网页.
一、配置环境
1.1Tomcat简介
Tomcat是ApacheJakarta的子项目之一,作为一个优秀的开源web应用服务器,全面支持jsp1.2以及servlet2.3规范。
因其技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的web应用服务器。
1.2SSL(ServerSocketLayer)简介
在网络上信息在源-宿的传递过程中会经过其它的计算机。
一般情况下,中间的计算机不会监听路过的信息。
但在使用网上银行或者进行信用卡交易的时候有可能被监视,从而导致个人隐私的泄露。
由于Internet和Intranet体系结构的原因,总有某些人能够读取并替换用户发出的信息。
随着网上支付的不断发展,人们对信息安全的要求越来越高。
因此Netscape公司提出了SSL协议,旨在达到在开放网络(Internet)上安全保密地传输信息的目的,这种协议在WEB上获得了广泛的应用。
之后IETF(www.ietf.org)对SSL作了标准化,即RFC2246,并将其称为TLS(TransportLayerSecurity),从技术上讲,TLS1.0与SSL3.0的差别非常微小。
1.3SSL工作原理
SSL协议使用不对称加密技术实现会话双方之间信息的安全传递。
可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。
不同于常用的http协议,我们在与网站建立SSL安全连接时使用https协议,即采用https:
//ip:
port/的方式来访问。
当我们与一个网站建立https连接时,我们的浏览器与WebServer之间要经过一个握手的过程来完成身份鉴定与密钥交换,从而建立安全连接。
具体过程如下:
用户浏览器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送到服务器。
服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。
如果配置服务器的SSL需要验证用户身份,还要发出请求要求浏览器提供用户证书。
客户端检查服务器证书,如果检查失败,提示不能建立SSL连接。
如果成功,那么继续。
客户端浏览器为本次会话生成pre-mastersecret,并将其用服务器公钥加密后发送给服务器。
如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。
如果服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。
如果不在信任列表中,结束本次会话。
如果检查通过,服务器用自己的私钥解密收到的pre-mastersecret,并用它通过某些算法生成本次会话的mastersecret。
客户端与服务器均使用此mastersecret生成本次会话的会话密钥(对称密钥)。
在双方SSL握手结束后传递任何消息均使用此会话密钥。
这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速度。
客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。
并通知服务器客户端已经完成本次SSL握手。
服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。
并通知客户端服务器已经完成本次SSL握手。
本次握手过程结束,会话已经建立。
双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。
1.4所需软件包
Tomcat4.0.2
用途:
WebServer。
下载:
http:
//jakarta.apache.org/builds/jakarta-tomcat-4.0/