分享
 
 
 

如何制作SSLX.509凭证?

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

本文的目的为:在 Linux/*BSD/UNIX 下,用 OpenSSL ,以自己名字发行 X.509 SSL 凭证 (Certificate) 。我们会制作两个凭证:第一步先做以自己为名 (XXX Association, YYY Corporation) ,自己签名背书的最高层认证中心 (Root CA) ,第二步再做以伺服器为名 (www.abccompany.com) ,用第一步做的最高层认证中心 (XXX Association, YYY Corporation) 签发的凭证 (Certificate) 。为简化起见,我们不做中间的凭证单位,直接由最高层认证中心 (Root CA) ,来签发凭证。

本文只讨论 SSL X.509 凭证做法,不讨论系统安全问题,不讨论加解密的演算法,也不讨论 OpenSSL 的如何安装。我假设你了解基本 Public Key/Private Key 不对称加解密的观念,知道什么是 RSA/DSA 演算法。我也假设你已经装好了 OpenSSL ,安装时使用下列符合 FHS[1] 标准的设定:

./config --prefix=/usr --openssldir=/usr/share/ssl

或安装 RPM 或 apt 的 openssl 套件。

本文是做法教学 (HOWTO) ,所以在编排上,把做法步骤 (how) 放在最前面,观念说明和讨论 (what and why) 等,都放在文末。若你看不懂做法,或想先学一些基本概念,请先往后翻阅,不需由前到后阅读。

请注意:依本文制作的凭证,还是会在浏览器等 SSL 程式上出现凭证无效的警告。

按 X.509 的规定,凭证可以用 RSA Key ,也可以用 DSA Key 。不过在 SSL 通讯中,伺服器的凭证因为要用来传 Key ,而只有 RSA 可以传 Key ,所以只能用 RSA 。至於认证中心,只是签名查核用,不用传 Key , DSA 或 RSA 都可以,但因为还有一些 SSL 程式不认得 DSA[2] ,为相容性起见,这里我们也做成 RSA 。

要制作最高层认证中心,可以以一般使用者权限来做,不一定要是 root 。但如果做出来的最高层认证中心,是整个组织签发凭证要用的,建议以 root 的权限来做,比较安全。同理,制作凭证,也可以以一般使用者权限来做。但如果做出来的凭证,是这个伺服器要用的,为安全起见,建议以 root 的权限来做。

若你是 root ,要安装给整个组织来用:

设定 OpenSSL 的环境

若你是用上述方法安装:

./config --prefix=/usr --openssldir=/usr/share/ssl

或装 Red Hat 的 RPM , OpenSSL 的设定档目录会在 /usr/share/ssl 。若你是安装 Mandrake 的 RPM ,设定档目录会在 /usr/lib/ssl 。这两个位置都不符合 FHS 的要求,资料备份起来也不方便。设定档应该放在 /etc/ssl 下。若你是安装 Debian 的 apt ,设定档目录会在 /etc/ssl 下,不会有问题。

# 设定相关的目录

mkdir -p /etc/ssl

mkdir -p /etc/ssl/private

chmod og-rwx /etc/ssl/private

mkdir -p /etc/ssl/certs

mkdir -p /etc/ssl/crl

mkdir -p /etc/ssl/newcerts

# 设定 OpenSSL 设定档[3]

mv /usr/share/ssl/openssl.cnf /etc/ssl

ln -s /etc/ssl/openssl.cnf /usr/share/ssl/openssl.cnf

# 设定 OpenSSL 设定档的位置[4]

export OPENSSL_CONF="/etc/ssl/openssl.cnf"

# 把 OpenSSL 设定档的位置加进 .bashrc 中[5]

echo "# OpenSSL 设定档的位置" ~/.bashrc

echo "export OPENSSL_CONF=\"/etc/ssl/openssl.cnf\"" ~/.bashrc

# 制作乱数档[6]

openssl rand -out /etc/ssl/private/.rand 1024

chmod og-rwx /etc/ssl/private/.rand

然后修改 /etc/ssl/openssl.cnf ,把这一行

dir= ./demoCA# Where everything is kept

改成这样

dir= /etc/ssl# Where everything is kept

制作最高层认证中心 (Root CA)

若你之前做过最高层认证中心,不要重做,不然原来签发的凭证,都会失效,都要重签。除非最高层认证中心自己过期、档案遗失、 Private Key 外泄,否则绝对不要重做最高层认证中心。

假设你要做的最高层认证中心叫做 myrootca 。

1. 制作 Private Key (及 Public Key )

这里我们做一支新的 Private Key 。 Public Key 可由 Private Key 推得,所以不用特别去做。

请为最高层认证中心的 Private Key 设定一个适当的密码。

# 制作 RSA[7] Private Key

openssl genrsa -des3 -out /etc/ssl/private/myrootca.key 2048

chmod og-rwx /etc/ssl/private/myrootca.key

2. 填写凭证申请书

凭证申请书,是把你的资料,和这个 Public Key 夹在一起,以便认证中心审核,签上签名用的。所以这个步骤,会问你这个 Key 的相关资料,包括国家、城市、单位名称、部门名称、凭证名称、联络人的信箱,以及申请的效期等等。请一一填写。详情请参考「什么是凭证?」。

若你要直接用最高层认证中心来直接当凭证用,凭证名称 (Common Name) 请用伺服器的全名 (www.abc.com) 。详情请参考「其她 SSL/X.509 凭证的做法」。

若不知如何填写,请参阅「如何填写凭证申请书」。

# 填写凭证申请书

openssl req -new -key /etc/ssl/private/myrootca.key -out /tmp/myrootca.req

3. 签发凭证

最高层认证中心因为没有上级了,没有人能给它签名,只能自己给自己签名。详情请参考「什么是最高层认证中心?」。

最高层认证中心最好永远不要过期。要是过期重签,所有原来它签发的凭证也都要重签,所有 SSL 程式也都要重新设定。所以我们效期签 7305 天(大约 20年)。若不设效期的话,预设是 30 天(一个月)。

签完凭证,凭证申请书就不用了,可以删掉。

# 自己给自己签名

openssl x509 -req -days 7305 -sha1

-extfile /etc/ssl/openssl.cnf -extensions v3_ca

-signkey /etc/ssl/private/myrootca.key

-in /tmp/myrootca.req -out /etc/ssl/certs/myrootca.crt

# 删除凭证申请书

rm -f /tmp/myrootca.req

这样就好了。 Private Key 在 /etc/ssl/private/myrootca.key ,自己签名的 Public Key 凭证在 /etc/ssl/certs/myrootca.crt 。 myrootca.key 是 Private Key ,要小心存好保护,只有 root 才能读,权限建议 0444 。 myrootca.crt 是 Public Key 凭证,要尽量散出去,让大家用。最好放到内部网路上,或放到网站上,让大家自己下载,自己加进去。

制作伺服器用的凭证

假设你要做 myhost 的凭证:

1. 制作 Private Key (及 Public Key )

这里我们做一支新的 Private Key 。 Public Key 可由 Private Key 推得,所以不用特别去做。

请先登入到要用凭证的那台伺服器上。

注意:伺服器的 Private Key 不要设密码,不然 SSL 伺服器程式启动的时候,一去读凭证和 Private Key ,就要问一次密码。每次重开机,依序启动每个伺服器程式的时候,一碰到要读 Private Key 的伺服器程式,都会停下来等键盘输入密码。要是放假没人,或伺服器放在 IDC 机房,从远端重开机或 Crash 后自行重开机,却当在那里等键盘敲密码,开不了机,那就不好玩了。

# 制作 RSA Private Key

openssl genrsa -out /etc/ssl/private/myhost.key 2048

chmod og-rwx /etc/ssl/private/myhost.key

2. 填写凭证申请书

凭证申请书,是把你的资料,和这个 Public Key 夹在一起,以便认证中心审核,签上签名用的。所以这个步骤,会问你这个 Key 的相关资料,包括国家、城市、单位名称、部门名称、凭证名称、联络人的信箱,以及申请的效期等等。这里凭证名称 (Common Name) 要用伺服器的全名 (www.abc.com) ,其她请一一填写。详情请参考「什么是凭证?」。

若不知如何填写,请参阅「如何填写凭证申请书」。

# 填写凭证申请书

openssl req -new -key /etc/ssl/private/myhost.key -out /tmp/myhost.req

3. 用最高层认证中心签发凭证[8]

伺服器凭证的效期其实无所谓,过期重签一张就好了。 SSL 程式认的是认证中心,不是凭证,所以凭证签了就会生效,不用去设定 SSL 程式。不过为免重签的麻烦,我们效期还是签 3650 天(大约十年)。

签完凭证,凭证申请书就不用了,可以删掉。

# 签发凭证

openssl x509 -req -days 3650 -sha1

-extfile /etc/ssl/openssl.cnf -extensions v3_req

-CA /etc/ssl/certs/myrootca.crt -CAkey /etc/ssl/private/myrootca.key

-CAserial /etc/ssl/myrootca.srl -CAcreateserial

-in /tmp/myhost.req -out /etc/ssl/certs/myhost.crt

# 删除凭证申请书

rm -f /tmp/myhost.req

这样就好了。[9] Private Key 在 /etc/ssl/private/myhost.key ,要小心存好保护,只有 root 才能读,建议权限为 0400 ; Public Key 凭证在 /etc/ssl/certs/myhost.crt ,要尽量散出去,让大家用。这组 Public/Private Key 凭证可以做为 myhost 的 SSL 凭证,用在 HTTPS 或 POP3S/TLS/SSL 上。最好不要把档案搬到别的地方。你可以在设定档里,把凭证位置设定到这里。 Private Key 不要到处放,以免不小心忘记保护。

若你是一般使用者:

设定 OpenSSL 的环境

# 设定相关的目录

mkdir -p ~/etc

mkdir -p ~/etc/ssl

mkdir -p ~/etc/ssl/private

chmod og-rwx ~/etc/ssl/private

mkdir -p ~/etc/ssl/certs

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有