SSL and Certificates

王朝厨房·作者佚名  2007-01-02
窄屏简体版  字體:   |    |    |  超大  

摘要: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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航