捕风之巢
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2008年11月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
随笔分类
休闲生活(3)
(rss)
程序人生(4)
(rss)
文章分类
IT新闻(2)
(rss)
java基础(5)
(rss)
java安全(28)
(rss)
java高级(13)
(rss)
web server(1)
(rss)
web 页面开发(9)
(rss)
web开发(9)
(rss)
xml应用(4)
(rss)
数据库技术(10)
(rss)
收藏夹
java(3)
(rss)
随笔档案
2007年3月 (7)
文章档案
2008年3月 (1)
2007年11月 (2)
2007年3月 (7)
2007年1月 (6)
2006年12月 (2)
2006年11月 (8)
2006年10月 (56)
相册
有朋自远方来
自娱自乐
统计
随笔 - 7
文章 - 82
评论 - 7
引用 - 0
留言簿
给我留言
查看公开留言
查看私人留言
java友情链接
123steel
spring,java
java中文api
Liferay学习
(rss)
maximo
Struts 2.0系列
WebLogic Workshop 中文使用手册
买运动鞋必看,偶吐血写出!
各种sql命令参考
在ant中使用cvs功能自动完成每日构建。
美河学习在线
java相关电子书籍下载
超频参考
转换器(Converter)——Struts 2.0中的魔术师
闲人野居
spring2.0
阿木
阅读排行榜
1. 详解各种维生素的功效(734)
2. Struts2.0中action的单元测试(700)
3. 解决使用innerHTML时不能执行javascript的问题(589)
4. 把女友升级为老婆的时候发生的BUG(226)
5. 赖宝日记【转】(218)
评论排行榜
1. 赖宝日记【转】(2)
2. 把女友升级为老婆的时候发生的BUG(0)
3. Struts2.0中action的单元测试(0)
4. 设置java运行环境有怪招(0)
5. web页面打印时的css分页功能(0)
openssl简介(二十五)--指令x509
二十五.
指令
x509
用法:
openssl x509 [-inform DER|PEM|NET] [-outform DER|PEM|NET]
[-keyform DER|PEM][-CAform DER|PEM] [-CAkeyform DER|PEM]
[-in filename][-out filename] [-serial] [-hash] [-subject]
[-issuer] [-nameopt option] [-email] [-startdate] [-enddate]
[-purpose] [-dates] [-modulus] [-fingerprint] [-alias]
[-noout] [-trustout] [-clrtrust] [-clrreject] [-addtrust arg]
[-addreject arg] [-setalias arg] [-days arg]
[-signkey filename][-x509toreq] [-req] [-CA filename]
[-CAkey filename] [-CAcreateserial] [-CAserial filename]
[-text] [-C] [-md2|-md5|-sha1|-mdc2] [-clrext]
[-extfile filename] [-extensions section]
说明:
本指令是一个功能很丰富的证书处理工具。可以用来显示证书的内容,转换其格式,给
CSR
签名等等。由于功能太多,我们按功能分成几部分来讲。
输入,输出等一些一般性的
option
-inform DER|PEM|NET
指定输入文件的格式。
-outform DER|PEM|NET
指定输出文件格式
-in filename
指定输入文件名
-out filename
指定输出文件名
-md2|-md5|-sha1|-mdc2
指定使用的哈希算法。缺省的是
MD5
于打印有关的
option
-text
用文本方式详细打印出该证书的所有细节。
-noout
不打印出请求的编码版本信息。
-modulus
打印出公共密钥的系数值。没研究过
RSA
就别用这个了。
-serial
打印出证书的系列号。
-hash
把证书的拥有者名称的哈希值给打印出来。
-subject
打印出证书拥有者的名字。
-issuer
打印证书颁发者名字。
-nameopt option
指定用什么格式打印上俩个
option
的输出。
后面有详细的介绍。
-email
如果有,打印出证书申请者的
email
地址
-startdate
打印证书的起始有效时间
-enddate
打印证书的到期时间
-dates
把上俩个
option
都给打印出来
-fingerprint
打印
DER
格式的证书的
DER
版本信息。
-C
用
C
代码风格打印结果。
与证书信任有关的
option
一个可以信任的证书的就是一个普通证书,但有一些附加项指定其可以用于哪些用途和不可以用于哪些用途
,
该证书还应该有一个
"
别名
"
。
一般来说验证一个证书的合法性的时候,相关的证书链上至少有一个证书必须是一个可以信任的证书。缺省的认为如果该证书链上的
Root CA
的证书可以信任,那么整条链上其他证书都可以用于任何用途。
以下的几个
option
只用来验证
Root CA
的证书。
CA
在颁发证书的时候可以控制该证书的用途,比如颁发可以用于
SSL client
而不能用于
SSL server
的证书。
-trustout
打印出可以信任的证书。
-setalias arg
设置证书别名。比如你可以把一个证书叫
"fordesign's certificate",
那么以后就可以使用这个别名来引用这个证书。
-alias
打印证书别名。
-clrtrust
清除证书附加项里所有有关用途允许的内容。
-clrreject
清除证书附加项里所有有关用途禁止的内容。
-addtrust arg
添加证书附加项里所有有关用途允许的内容。
-addreject arg
添加证书附加项里所有有关用途禁止的内容。
-purpose
打印出证书附加项里所有有关用途允许和用途禁止的内容。
与签名有关的
otpion
本指令可以用来处理
CSR
和给证书签名,就象一个
CA
-signkey filename
使用这个
option
同时必须提供私有密钥文件。这样把输入的文件变成字签名的证书。
如果输入的文件是一个证书,那么它的颁发者会被
set
成其拥有者
.
其他相关的项也会被改成符合自签名特征的证书项。
如果输入的文件是
CSR,
那么就生成自签名文件。
-clrext
把证书的扩展项删除。
-keyform PEM|DER
指定使用的私有密钥文件格式。
-days arg
指定证书的有效时间长短。缺省为
30
天。
-x509toreq
把一个证书转化成
CSR.
用
-signkey
指定私有密钥文件
-req
缺省的认为输入文件是证书文件,
set
了这个
option
说明输入文件是
CSR.
-CA filename
指定签名用的
CA
的证书文件名。
-CAkey filename
指定
CA
私有密钥文件。如果这个
option
没有参数输入,那么缺省认为私有密钥在
CA
证书文件里有。
-CAserial filename
指定
CA
的证书系列号文件。证书系列号文件在前面介绍过,这里不重复了。
-CAcreateserial filename
如果没有
CA
系列号文件,那么本
option
将生成一个。
-extfile filename
指定包含证书扩展项的文件名。如果没有,那么生成的证书将没有任何扩展项。
-extensions section
指定文件中包含要增加的扩展项的
section
上面俩个
option
有点难明白是吧?后面有举例。
与名字有关的
option.
这些
option
决定证书拥有者
/
颁发者的打印方式。缺省方式是印在一行中。
这里有必要解释一下这个证书拥有者
/
颁发者是什么回事。它不是我们常识里的一个名字,而是一个结构,包含很多字段。
英文分别叫
subject name/issuer name.
下面是一个
subject name
的例子
subject=
countryName = AU
stateOrProvinceName = Some-State
localityName = gz
organizationName = ai ltd
organizationalUnitName = sw
commonName = fordesign
emailAddress = xxx@xxx.xom
-nameopt
这个
option
后面的参数就是决定打印的方式,其参数有以下可选:
compat
使用以前版本的格式,等于没有设置任何以下
option
RFC2253
使用
RFC2253
规定的格式。
oneline
所有名字打印在一行里面。
multiline
名字里的各个字段用多行打印出来。
上面那几个是最常用的了,下面的这些我怎么用怎么不对,也许以后研究
source
在完善这里了。
esc_2253 esc_ctrl esc_msb use_quote utf8 no_type show_type dump_der
dump_nostr dump_all dump_unknown sep_comma_plus sep_comma_plus_space
sep_semi_plus_space sep_multiline dn_rev nofname, sname, lname, oid spc_eq
举例时间:
打印出证书的内容:
openssl x509 -in cert.pem -noout -text
打印出证书的系列号
openssl x509 -in cert.pem -noout -serial
打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject
以
RFC2253
规定的格式打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
在支持
UTF8
的终端一行过打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb
打印出证书的
MD5
特征参数
openssl x509 -in cert.pem -noout -fingerprint
打印出证书的
SHA
特征参数
openssl x509 -sha1 -in cert.pem -noout -fingerprint
把
PEM
格式的证书转化成
DER
格式
openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
把一个证书转化成
CSR
openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
给一个
CSR
进行处理,颁发字签名证书,增加
CA
扩展项
openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem
给一个
CSR
签名,增加用户证书扩展项
openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial
把某证书转化成用于
SSL client
可信任证书
,
增加别名
alias
openssl x509 -in cert.pem -addtrust sslclient -alias "Steve's Class 1 CA" -out trust.pem
上面有很多地方涉及到证书扩展
/
证书用途,这里解释一下:
我们知道一个证书是包含很多内容的,除了基本的那几个之外,还有很多扩展的项。比如证书用途,其实也只是证书扩展项中的一个。
我们来看看一个
CA
证书的内容:
openssl x509 -in ca.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd,
CN=fordesign/Email=fordeisgn@21cn.com
Validity
Not Before: Nov 9 04:02:07 2000 GMT
Not After : Nov 9 04:02:07 2001 GMT
Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd,
CN=fordesign/Email=fordeisgn@21cn.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:e7:62:1b:fb:78:33:d7:fa:c4:83:fb:
2c
:65:c1:
08:03:
1f
:3b:79:b9:66:bb:31:aa:77:d4:47:ac:be:
e5:20:ce:ed:
1f
:b2:b5:
4c
:79:c9:9b:ad:1d:0b:
7f
:
84:49:03:6b:79:
1a
:fd:05:ca:36:b3:90:b8:
5c
:c0:
26:93:c0:02:eb:78:d6:8b:e1:91:df:85:39:33:fc:
3d:59:e9:
7f
:58:34:bf:be:ef:bd:22:a5:be:26:c0:
16:9b:41:36:45:05:fe:f9:b2:05:42:04:c9:3b:28:
c1:
0a
:48:f4:c7:d6:a8:
8c
:f9:
2c
:c1:1e:f5:8b:dc:
19:59:
7c
:47:f7:91:cc:5d:75
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
69:41:87:55:BD:52:99
0:F5:EC:11:
7F
:
0A
:01:53:58:4E:0B:
7C
:F7
X509v3 Authority Key Identifier:
keyid:69:41:87:55:BD:52:99
0:F5:EC:11:
7F
:
0A
:01:53:58:
4E:0B:
7C
:F7
DirName:/C=AU/ST=Some-State/O=Internet Widgits Pty
Ltd/CN=fordesign/Email=fordeisgn@21cn.com
serial:00
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: md5WithRSAEncryption
79:14:99:
4a
:
8f
:64:63:ab:fb:ad:fe:bc:ba:df:53:97:c6:92:
41:4d:de:fc:59:98:39:36:36:8e:c6:05:8d:
0a
:bc:49:d6:20:
02:9d:a2:
5f
:
0f
:03:12:1b:f2:af:23:90:
7f
:b1:
6a
:86:e8:3e:
0b:
2c
:fd:11:89:86:c3:21:
3c
:25:e2:
9c
:de:64:
7a
:14:82:32:
22:e1:35:be:39:90:f5:41:60:
1a
:77:2e:
9f
:d9:50:f4:81:a4:
67:b5:3e:12:e5:06:da:
1f
:d9:e3:93:2d:fe:a1:
2f
:a9:f3:25:
05:03:00:24:00:f1:5d:
1f
:d7:77:8b:c8:db:62:82:32:66:fd:
10:fa
是否看到我们先提到过的
subject name/issuer name.
本证书中这俩个字段是一样的,明显是自签名证书,是一个
Root CA
的证书。从
X509v3 extension
开始就是证书扩展项了。
这里有个
X509v3 Basic constraints.
里面的
CA
字段决定该证书是否可以做
CA
的证书,这里是
TURE
。如果这个字段没有,那么会根据其他内容决定该证书是否可以做
CA
证书。
如果是
X509v1
证书,又没有这个扩展项,那么只要
subject name
和
issuer name
相同,就认为是
Root CA
证书了。
本例的证书没有证书用途扩展项,它是一个叫
keyUseage
的字段。
举个例子就可以看出该字段目前可以有以下值
openssl x509 -purpose -in server.crt
Certificate purposes:
SSL client : Yes
SSL client CA : No
SSL server : Yes
SSL server CA : No
Netscape SSL server : Yes
Netscape SSL server CA : No
S/MIME signing : Yes
S/MIME signing CA : No
S/MIME encryption : Yes
S/MIME encryption CA : No
CRL signing : Yes
CRL signing CA : No
Any Purpose : Yes
Any Purpose CA : Yes
SSL Client
SSL Client CA
每个值的具体意义应该可以看名字就知道了吧?
X509
指令在转化证书成
CSR
的时候没有办法把证书里的扩展项转化过去给
CSR
签名做证书的时候,如果使用了多个
option,
应该自己保证这些
option
没有冲突。
posted on 2006-10-17 15:51
捕风
阅读(107)
评论(0)
编辑
收藏
所属分类:
java安全
IT新闻
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
配置Tomcat 4使用SSL
openssl简介(二十五)--指令x509
openssl简介(二十四)--指令speed和指令version
openssl简介(二十三)--指令sess_id
openssl简介(二十二)--指令s_server
openssl简介(二十一)--指令s_client