ChinaUnix.net
 >> ChinaUnix.net > Solaris

这两天在Apache上安装MOD_SSL,配置HTTPS服务器一点心得!共享给大家参考!

作者:zdm     发表时间:2002/12/09 01:17pm

最后面本来画了一个图,这里面没法显示,谁要我直接发Email给他吧!


手工签署证书的方法
虽然在安装MOD_SSL时已经使用 make certificate 命令建立了服务器
的证书签名,但是有时你可能需要改变它。

当然有很多自动的脚本可以实现它,但是最可靠的方法是手工签署
证书。

首先我假定你已经安装好了openssl和MOD_SSL,如果你的openssl安装时
的prefix设置为/usr/local/openssl,那么把/usr/local/openssl/bin加入
执行文件查找路径。还需要MOD_SSL源代码中的一个脚本,它在MOD_SSL的
源代码目录树下的pkg.contrib目录中,文件名为 sign.sh。
将它拷贝到 /usr/local/openssl/bin 中。

第一步:先建立一个 CA 的证书,
首先为 CA 创建一个 RSA 私用密钥,
[S-1]
openssl genrsa -des3 -out ca.key 1024
系统提示输入 PEM pass phrase,也就是密码,输入后牢记它。
生成 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 不用输入。
“Common Name: Chen Yang 你的姓名”这条信息请你输入你的服务器的域名或者IP地址,
你可以查看 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

最后apache设置
如果你的apache编译参数prefix为/usr/local/apache,
那么拷贝server.crt 和 server.key 到 /usr/local/apache/conf
修改httpd.conf
将下面的参数改为:
SSLCertificateFILE /usr/local/apache/conf/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/server.key

可以 apachectl startssl 试一下了
第四步:生成client端的个人证书
你需要生成一个客户端的证书,方法如下:
openssl  pkcs12  -export  -in  server.crt  -inkey  server.key  -out  public.p12  -name  "public"
openssl  pkcs12  -in  file.p12  -info  -noout (查看.p12证书文件的内容)
在客户端安装证书的方法:
安装你在第一步生成的ca.crt文件,打开web浏览器,“工具”—“Internet选项”—“内容”—“证书”选择导入证书,然后按照提示一步一步完成安装。或者你双击证书文件按照提示一步一步安装证书。
然后安装你在第三步生成的server.p12文件,方法同上。


注意的问题:
sign.sh脚本文件的内容如下:
#!/bin/sh
##
##  sign.sh -- Sign a SSL Certificate Request (CSR)
##  Copyright (c) 1998-2001 Ralf S. Engelschall, All Rights Reserved.
##

#   argument line handling
CSR=$1
if [ $# -ne 1 ]; then
   echo "Usage: sign.sign <whatever>.csr"; exit 1
fi
if [ ! -f $CSR ]; then
   echo "CSR not found: $CSR"; exit 1
fi
case $CSR in
  *.csr ) CERT="`echo $CSR | sed -e 's/\.csr/.crt/'`" ;;
      * ) CERT="$CSR.crt" ;;
esac

#   make sure environment exists
if [ ! -d ca.db.certs ]; then
   mkdir ca.db.certs
fi
if [ ! -f ca.db.serial ]; then
   echo '01' >ca.db.serial
fi
if [ ! -f ca.db.index ]; then
   cp /dev/null ca.db.index
fi

#   create an own SSLeay config
cat >ca.config <<EOT
[ ca ]
default_ca              = CA_own
[ CA_own ]
dir                     = .
certs                   = \$dir
new_certs_dir           = \$dir/ca.db.certs
database                = \$dir/ca.db.index
serial                  = \$dir/ca.db.serial
RANDFILE                = \$dir/ca.db.rand
certificate             = \$dir/ca.crt
private_key             = \$dir/ca.key
default_days            = 365
default_crl_days        = 30
default_md              = md5
preserve                = no
policy                  = policy_anything
[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional
EOT

#  sign the certificate
echo "CA signing: $CSR -> $CERT:"
openssl ca -config ca.config -out $CERT -infiles $CSR
echo "CA verifying: $CERT <-> CA cert"
openssl verify –Cafile  ca.crt  $CERT

#  cleanup after SSLeay
rm -f ca.config
rm -f ca.db.serial.old
rm -f ca.db.index.old

#  die gracefully
exit 0
如果你在第一步生成的根证书的名字不叫ca.crt,而是其他的文件名字如:certi.crt,则你在第三步用sign.sh脚本签署你的服务器证书时也要修改sign.sh脚本里的相应文件名。


根据我的了解谈谈对apache与openssl证书的理解,
你在第二步所做的工作就是生成一个服务器证书签署请求文件,它并不是真正的服务器证书文件,你要是想得到真正的服务器证书文件有两条选择:
(一).是可以通过一个商业性CA如Verisign 或 Thawte签署证书。那么你通常要将CSR贴入一个web表格,支付签署费用并等待签署的证书。关于商业性CA的更多信息,请参见下列链接:

Verisign - http://digitalid.verisign.com/server/apacheNotice.htm
Thawte Consulting - http://www.thawte.com/certs/server/request.html
CertiSign Certificadora Digital Ltda. - http://www.certisign.com.br
IKS GmbH - http://www.iks-jena.de/produkte/ca /
Uptime Commerce Ltd. - http://www.uptimecommerce.com
BelSign NV/SA - http://www.belsign.be
(二).你在第一步生成的是一个自签署的根证书,这就相当于你自己是一个签署证书的CA机构,你可以用第一步生成的ca.crt证书来签署服务器的证书,签署的方法就是第三步用sign.sh脚本文件签署,可以返回去看看。


此文章相关评论:
该文章有6个相关评论如下:(点这儿可以发表评论)
yuantong 发表于: 2002/12/09 04:03pm
应该加精
 
birdeng 发表于: 2002/12/16 01:22pm
好东西!
 
wzy9681 发表于: 2002/12/16 01:42pm
怎么这么复杂。看都看不懂。怎么办?!
 
zdm 发表于: 2003/01/08 02:45pm
呵呵!
 
zdm 发表于: 2003/01/08 02:59pm
拜托“ wzy9681 ”老兄穿上衣服行不?别人以为我在浏览黄色网站!
 
南非蜘蛛 发表于: 2003/01/08 03:06pm
[quote][b]下面引用由[u]zdm[/u]在 [i]2003/01/08 02:59pm[/i] 发表的内容:[/b]
拜托“ wzy9681 ”老兄穿上衣服行不?别人以为我在浏览黄色网站!
[/quote]
呵呵 :em53:
 
 

Copyright © ChinaUnix.net  *  转载请注明出处及作者