摘要:本文主要介绍了使用公开源代码的工具OpenSSL来完成数字证书的签署,实现电子商务中的CA认证的过程。
关键词:电子商务;OpenSSL;CA认证
1. 前言
作为电子商务的安全核心SSL协议在电子商务安全性方面扮演了重要的角色。本文就是从安全技术角度介绍了以公开源代码的工具OpenSSL来实现电子商务中的安全认证过程。
2. SSL(Secure Socket Layer)协议及其主要技术
1996年由美国Netscape公司开发和倡导的SSL协议,它是目前安全电子商务交易中使用最多的协议之一,它被许多世界知名厂商的Intranet和Internet网络产品所支持。
SSL应用在Client和Server间安全的Web HTTP通信,URL以https开始替代http,并使用443端口进行通信。它主要使用加密机制、数字签名、数字摘要、身份认证、CA认证技术提供Client和Server之间的秘密性、完整性、认证性三种基本的安全服务。
3. 用OpenSSL工具实现安全认证
目前,国外主流的电子商务安全协议在核心密码算法上都有出口限制,如只允许40位或56位的RC4和512位的RSA算法出口等。这样的算法强度引进后无法满足我国电子商务实际应用当中的安全需求。但是,完全自主定义和开发一套安全标准体系不是一蹴而就的事情,需要人、财、物的长期投入。
因此,如何对国外主流的电子商务安全协议的安全模块进行改造,用国内先进的密码算法替换其相应的安全强度不够的算法,变为国产的强安全协议,这样就能较好地提高我国电子商务安全技术水平。
在SSL未提供源代码的情况下,由澳大利亚软件工程师Eric Young与Tim Hudson联合开发的OpenSSL恰好解决了这一难题。它不仅能实现SSL的所有功能,支持目前所有基于SSL V2/V3和TSL V1的应用软件,而且由于源代码公开和提供了各种加密算法,完全可以满足国外安全协议引进后的本地化改造需求。
下面就用OpenSSL提供的强大功能在FreeBSD平台下进行手工签署证书的过程。
⑴ 先建立一个 CA 的证书,首先为 CA 创建一个 RSA 私用密钥:
# OpenSSL genrsa -des3 -out ca.key 1024
该指令中genras表示生成RSA私有密钥文件。
-des3表示用DES3加密该文件。
-out ca.key表示生成文件ca.key。
1024是我们的RSA key的长度。
生成server.key的时候会要你输入一个密码,这个密钥用来保护你的ca.key文件,这样即使人家偷走你的ca.key文件,也打不开,拿不到你的私有密钥。
运行该指令后系统提示输入 PEM pass phrase,也就是ca.key文件的加密密码,这里设为12345678。
⑵ 用下列命令查看它的内容:
# OpenSSL rsa -noout -text -in ca.key
该指令中rsa表示对RSA私有密钥的处理。
-noout表示不打印出key的编码版本信息。
-text表示打印出私有密钥的各个组成部分。
-in ca.key 表示对ca.key文件的处理
对RSA算法进行分析可以知道,RSA的私有密钥其实就是三个数字,其中两个是质数prime numbers。产生RSA私有密钥的关键就是产生这两个质数。还有一些其他的参数,引导着整个私有密钥产生的过程。
⑶ 利用 CA 的 RSA 密钥创建一个自签署的 CA 证书
# OpenSSL req -new -x509 -days 365 -key ca.key -out ca.crt
该指令中req用来创建和处理CA证书,它还能够建立自签名证书,做Root CA。
-new 产生一个新的CSR, 它会要输入创建证书请求CSR的一些必须的信息。
-x509 将产生自签名的证书,一般用来做测试用,或者自己做个Root CA用。
-days 365 指定我们自己的CA给人家签证书的有效期为365天。
-key ca.key指明我们的私有密钥文件名为ca.key。
-out ca.crt指出输出的文件名为ca.crt。
执行该指令时系统要求用户输入一些用户的信息,如下所示:(框内为输入的内容)
Using configuration from /etc/ssl/OpenSSL.cnf
Enter PEM pass phrase:12345678
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN (两个字母的国家代号)
State or Province Name (full name) [Some-State]:JIANG SU (省份名称)
Locality Name (eg, city) []:ZHANGJIAGANG (城市名称)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:FAMILY NETWORK (公司名称)
Organizational Unit Name (eg, section) []:HOME (部门名称)
Common Name (eg, YOUR name) []:TJL (你的姓名)
Email Address []:TJL@WX88.NET (Email地址)
⑷ 用下列命令查看生成证书的内容:
# OpenSSL x509 -noout -text -in ca.crt
该指令中x509表示证书处理工具。
-noout表示不打印出key的编码版本信息。
-text 表示以文本方式显示内容。
-in ca.crt 表示对ca.crt文件进行处理
系统显示证书内容为:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=CN, ST=JIANG SU, L=ZHANGJIAGANG, O=FAMILY NETWORK, OU=HOME, CN=TJL/Email=TJL@WX88.NE
Validity
Not Before: Feb 24 14:49:27 2003 GMT
Not After : Feb 21 14:49:27 2013 GMT
Subject: C=CN, ST=JIANG SU, L=ZHANGJIAGANG, O=FAMILY NETWORK, OU=HOME, CN=TJL/Email=TJL@WX88.NET
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:da:20:09:11:19:1f:12:f0:98:0c:fc:91:ac:3e:
……
22:e1:ca:04:0f:dc:e9:bd:9f
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
03:B0:14:8C:5D:C6:F8:F4:B0:96:A0:CC:7C:8F:9B:00:BB:78:E6:A6
X509v3 Authority Key Identifier:
keyid:03:B0:14:8C:5D:C6:F8:F4:B0:96:A0:CC:7C:8F:9B:00:BB:78:E6:A6
DirName:/C=CN/ST=JIANG SU/L=ZHANGJIAGANG/O=FAMILY NETWORK/OU=HOME/CN=TJL/Email=TJL@WX88.NET
serial:00
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: md5WithRSAEncryption
8d:e8:46:82:40:b4:18:a2:12:9f:7a:66:e5:fc:0c:3f:77:5a:
……
04:13
从上面的输出内容可以看出这个证书基本包含了X.509数字证书的内容,从发行者Issuer和接受者Subject的信息也可以看出是个自签署的证书。
下面创建服务器证书签署请求(使用指令和系统显示信息基本和以上类似):
⑸ 首先为Apache 创建一个 RSA 私用密钥:
# OpenSSL genrsa -des3 -out server.key 1024
这里也要设定口令pass phrase,生成 server.key 文件。
⑹ 用下列命令查看它的内容:
# OpenSSL rsa -noout -text -in server.key
⑺ 用 server.key 生成证书签署请求 CSR:
# OpenSSL req -new -key server.key -out server.csr
这里也要输入一些请求证书的信息,和上面的内容类似。
⑻ 生成证书请求后,下面可以签署证书了,需要用到OpenSSL源代码中的一个脚本 sign.sh,签署后就可以得到数字证书server.crt。
# sign.sh server.csr
⑼ 启动安全Web服务
最后在apache服务器中进行ca认证设置,拷贝server.crt 和server.key到/usr/local/apache/conf
修改httpd.conf 将下面的参数改为:
SSLCertificateFILE /usr/local/apache/conf/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/server.key
可以启动带安全连接的Apache试一下了。
# /usr/local/apache/bin/apachectl startssl
提示输入pass phrase(就是前面为服务器设置的口
4.结束语
SSL是目前国际上流行Web安全工具,它融合了多种安全技术,实现安全的Web通信,必将在国内的安全电子交易领域得到广泛的应用。通过对公开源代码的工具OpenSSL的使用和分析,可以使我们对SSL协议有很好的理解和应用,对研究电子商务中的安全问题有具有特别的理论价值和实用价值。
参考文献:
[1] Alan O Freier,Philip Karlton. The SSL Protocol Version 3.0[J]. Netscape Communications.1996
CCITT.Recommendation X.509:The Directory.Authentication Framework[R].1998
林 枫主编. 电子商务安全技术及应用 北京:航空航天大学出版社
易江波,赵战生,阮耀平. SSL及使用SSLeay实现证书的签发和管理 计算机应用研究2001
韦 卫,王德杰等. 基于SSL的完全WWW系统的研究与实现[J].计算机研究与发展 1999
唐礼勇,陈钟编写. 电子商务技术及其安全问题. 计算机工程与应用 2000