摘要:SSL and Certificates
SSL and Certificates
SSL and Certificates
1.SSL and Certificates介绍
1.1 什么是SSL
SSL(Secure Socket Layer)和(TSL)协议是用户和SSL电子商务网站之间加密通信的WEB标准。用加密来保护通过SSL连接发送的数据,不被窃听和篡改。SSL让企业和用户放心的向Web站点发送私人的数据,例如:信用卡帐号密码等机密信息。在建立SSL会话的时候需要Web 服务器认证(又称做安全服务器认证,或者SSL认证)。
1.2 什么是 Certificates
证书是第三方的权威证书授权机构Certificate Authority (CA) 授权颁发的文件,SSL协议通过证书来鉴定发向一端或者两端之间的传输。
1.3 SSL 和 Certificates 的工作流程
客户浏览器请求一个安全页面:
1. CLIENT----[https://entry.mail.188.com/cgi/login?user=kev&password=xxx]----> 浏览器
2. 浏览器识别出 https ,向服务器发出 SSL 握手请求。
3. CLIENT<-------------------------[Certificates with public key]<------------------------SERVER
4. CLIENT浏览器检查该证书是否为受信的CA 颁发、该证书是否还在有效期内、改证书是否授权给该站点。如果检查通过则进入第四步,否则会提问用户是否信任该站点等
5. 浏览器产生一个随机对称加密密钥来加密将要发送的URL请求和其他的http数据,然后用证书中包含的公钥将这个对称加密密钥加密,然后将加密的密钥和机密数据一起发送到SERVER
6. 服务器用私钥解密对称密钥然后用其来解开其他加密数据
7. 服务器发回用对称密钥加密的html页面和http数据及该对称密钥
8. 客户浏览器用对称密钥解密信息并浏览
1.3 SSL目前的主要用途
机密传输用户的登陆信息,帐号密码,手机号等
防止用户发送的数据被窃取,篡改,使用户放心的确认连接的是我们的服务器而不是其他的欺骗站点(由CA 鉴定确认)。
2.工具对比介绍
Stunnel、Apache-ssl、mod_ssl
Stunnel网上颇受好评,配置简单,应用范围广泛
Apache-ssl 更新缓慢,受黑客攻击交多,较少使用
mod_ssl 开发于1998年,起源于Apache-ssl功能齐全,兼容性好,可配置性非常强
依赖工具openssl
3.模块的安装,配置
3.1 mod_ssl
Redhat9 预装的是openssl-0.9.7a-2
需要下载openssl-0.9.7b 或更高版本的openssl,下载地址:
http://www.openssl.org/source/openssl-0.9.7e.tar.gz
1. Configure and build the OpenSSL library:
只要编译出库文件和include等给apache使用,不需要安装。
$ cd openssl-0.9.7e no-threads
$ sh config
$ make
$ make test
$ cd ..
sh config no-idea no-threads -fPIC
no-threads 是因为我们使用的apache-1.3.33不支持多线程,所以不需要编译openssl支持多线程。不加上该选项会耗费很多资源在openssl内部计算的时候的进程锁上。
2. 为了提高性能,让mod_ssl使用内存做session cache 而不是使用硬盘来做,需要MM Shared Memory library
下载地址:ftp://ftp.ossp.org/pkg/lib/mm/mm-1.3.1.tar.gz
$ cd mm-1.1.3
$ ./configure --disable-shared
$ make
$ cd ..
3.重新编译apache
SSL_BASE=../openssl-0.9.7e EAPI_MM=../mm-1.1.3 ./configure
--enable-module=ssl
--prefix=/home/coremail
--enable-shared=ssl
--disable-rule=ssl_compat
--enable-rule=ssl_sdbm
--enable-rule=ssl_experimental
--enable-rule=ssl_vendor
--activate-module=src/modules/fastcgi/libfastcgi.a
--enable-module=so
--disable-module=status
--disable-module=access
--disable-module=actions
--disable-module=asis
--disable-module=auth
--disable-module=autoindex
--disable-module=imap
--disable-module=include
--disable-module=negotiation
--disable-module=userdir
make
make install
# fastcgi 模块的编译和 MaxClinet 值的修改请参照 apache_install的文档。
3.2 stunnel
1. 可以使用原有的openssl不需要升级openssl。
2.stunnel 启动时会自己计算出允许的最大并发用户数。通常为500。可以通过修改源代码使其变得可配置
修改stunnel-4.07/src/stunnel.c
注释掉一下7行并增加后两行。
/* if(max_fds) {
max_clients=max_fds>=256 ? max_fds*125/256 : (max_fds-6)/2;
s_log(LOG_NOTICE, "%d clients allowed", max_clients);
} else {
max_clients=0;
s_log(LOG_NOTICE, "No limit detected for the number of clients");
}
*/
max_clients = max_fds;
s_log(LOG_NOTICE, "%d clients allowed", max_clients);
这样就可以通过ulimit –n 来修改并发数上限。
2. Compile the software:
./configure --with-ssl=/usr/local/stunnel --prefix=/usr/local/stunnel
make
make install
4. 模块的配置
4.1 生成证书
证书可以网上申请免费试用的也可以自己做一个自签署的证书,不过浏览器下载后会一级一级的向上查找证书的签署机构,如果不在它的root CA 列表内则会认为该站点是不受信的站点,询问用户是否下载证书并继续。
步骤:
先建立一个 CA 的证书,
首先为 CA 创建一个 RSA 私用密钥,
[S-1]
openssl genrsa -des3 -out ca.key 1024
系统提示输入 PEM pass phrase,也就是密码,输入后牢记它。 (也可以不输密码,如果输了每次启动apache 就要输密码)。
生成 ca.key 文件,将文件属性改为400,并放在安全的地方。
[S-2]
chmod 400 ca.key
你可以用下列命令查看它的内容,
[S-3]
openssl rsa -noout -text -in ca.key
利用 CA 的 RSA 密钥创建一个自签署的 CA 证书(X.509结构)
[S-4]
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
然后需要输入下列信息:
Country Name: cn 两个字母的国家代号
State or Province Name: An Hui 省份名称
Locality Name: Bengbu 城市名称
Organization Name: Family Network 公司名称
Organizational Unit Name: Home 部门名称
Common Name: Chen Yang 你的姓名
Email Address: sunstorm@263.net Email地址
生成 ca.crt 文件,将文件属性改为400,并放在安全的地方。
[S-5]
chmod 400 ca.crt
你可以用下列命令查看它的内容,
[S-6]
openssl x509 -noout -text -in ca.crt
下面要创建服务器证书签署请求,
首先为你的 Apache 创建一个 RSA 私用密钥:
[S-7]
openssl genrsa -des3 -out server.key 1024
这里也要设定pass phrase。
生成 server.key 文件,将文件属性改为400,并放在安全的地方。
[S-8]
chmod 400 server.key
你可以用下列命令查看它的内容,
[S-9]
openssl rsa -noout -text -in server.key
用 server.key 生成证书签署请求 CSR.
[S-10]
openssl req -new -key server.key -out server.csr
这里也要输入一些信息,和[S-4]中的内容类似。
至于 'extra' attributes 不用输入。
你可以查看 CSR 的细节
[S-11]
openssl req -noout -text -in server.csr
下面可以签署证书了,需要用到脚本 sign.sh
[S-12]
sign.sh server.csr
就可以得到server.crt。
将文件属性改为400,并放在安全的地方。
[S-13]
chmod 400 server.crt
删除CSR
[S-14]
rm server.csr
正式CA授权的证书可以到网上购买
4.2 apache设置
那么拷贝server.crt 和 server.key 到 /home/coremail/conf
修改httpd.conf
将<VirtualHost _default_:443>里的如下参数改为:
SSLCertificateFILE /home/coremail/conf/server.crt
SSLCertificateKeyFile /home/coremail/conf/server.key
$ ~coremail/bin/apachectl startssl
Server app1.localdomain:443 (RSA)
Enter pass phrase:
Ok: Pass Phrase Dialog successful.
bin/apachectl startssl: httpd started
4.3 Stunnel
这里主要说明stunnel的配置
Stunnel 的配置比较灵活,使用以daemon 方式运行Stunnel Server。可以不修改apache的配置,可以和entry apache运行在一台机器上,也可以运行在专门的机器上,作为加密传输的代理。Stunnel服务监听443端口响应用户登陆时的https请求,与用户建立SSL连接然后将请求解密后转给entry机器的80端口,entry返回的URL在由Stunnel加密发回给用户,用户解密后获得URL就可以转到WebMail机器浏览信件。
配置如下:
/etc/stunnel/stunnel.conf
#################
# Global options
#################
cert = /usr/local/stunnel/etc/stunnel/server.crt
key = /usr/local/stunnel/etc/stunnel/server.key
output = /usr/local/stunnel/stunnel.log
chroot = /usr/local/stunnel/var/stunnel/
setuid = root
setgid = root
pid = /stunnel.pid
CAfile = /usr/local/stunnel/etc/stunnel/stunnel.pem
debug = 6
RNDbytes = 64
RNDfile = /dev/urandom
RNDoverwrite = yes
session = 300
verify = none
client = no
#######################
# Service-level options
#######################
[https]
accept = 443
connect = 192.168.0.61:80
TIMEOUTbusy = 300
TIMEOUTclose = 0
TIMEOUTconnect = 75
TIMEOUTidle = 43200
4.4 Stunnel启动脚本
#!/bin/sh
#
###################################################
# stunnel-4.07 start shell
###################################################
PIDFILE=/usr/local/stunnel/var/stunnel/stunnel.pid
STUNNEL=/usr/local/stunnel/sbin/stunnel
# check for pidfile
if [ -f $PIDFILE ] ; then
PID=`cat $PIDFILE`
if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null ; then