文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>apache2.0.54 中配置认证

apache2.0.54 中配置认证

时间:2005-09-26  来源:brightcrest

利用openssl 来生成认证的密钥及证书;

修改apache的配置文件来实现认证。

基本概念:

RootCA:这是一个权威机构,是值得别人信任的。它给别人颁发证书。

证书的验证过程:

一个RootCA,称为Top,它给一个单位A颁发了一个证书。

B要和A通信,A将其证书交给了B:

B打开证书一看,是由Top颁发的,然后就去查Top是不是值得他信任,B在自己的信任证书列表中找到了Top,那么就认为A的证书是可信的。

B需要有一个自己信任的证书的列表,这个列表在IE中就是“Trusted Root Certification Authorities”。

 

(一)IE上证书的安装

两个方面,

一方面是验证server的证书的合法性,需要在“Trusted Root Certification Authorities”中安装Server证书的RootCA;

别一方面是安装自己提供给Server的证书,以便Server验证Client的合法性,需要在IE中安装自己的证书,当然这一证书的RootCA,

也应该在“Trusted Root Certification Authorities”中。

(1)以下步骤用来生成RootCA的证书,RootCA的证书是self certificated的。

#RootCA:(self certification)

产生RootCA的私钥
openssl genrsa -des3 -out ca.key 1024

给RootCA自己产生一个证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

产生 PKCS12格式的证书,以便在IE中安装
openssl pkcs12 -export  -in ca.crt -inkey ca.key -out ca.pfx

现在就可以在IE中Tools-->Internet Options-->Content->Certificates-->Import

将ca.pfx导入到“Trusted Root Certification Authorities” 中。

(2)以下步骤用来生成Client的证书,该证书是由RootCA颁发的。

产生client的私钥

openssl genrsa -des3 -out client.key 1024

产生client的证书签名请求
openssl req -new -key client.key -out client.csr

由RootCA颁发client证书

openssl x509 -req -in client.csr -out client.crt -signkey ca.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650

产生 PKCS12格式的证书,以便在IE中安装

openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx

将cleint.pfx导入到“Personal” 中。

*** 为简化起见,server证书 和client证书由同一RootCA颁发,所以就不必另装一个 client证书的RootCA了

(二)apache Server上配置证书

(1)生成证书

两个方面,生成RootCA同上,生成server的证书如下:

产生server的私钥

openssl genrsa -des3 -out server.key 1024

产生server的证书签名请求
openssl req -new -key server.key -out server.csr

由RootCA颁发server证书

openssl x509 -req -in server.csr -out server.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650

(2)配置apache

设置ssl.conf中的如下选项

SSLEngine on

以下用于设置server的证书

SSLCertificateFile /home/httpd/conf/ssl.crt/server.crt

SSLCertificateKeyFile /home/httpd/conf/ssl.key/server.key

以下文件中包括server证书的RootCA

SSLCertificateChainFile /home/httpd/conf/ssl.crt/ca.crt

以下用于验证client的rootCA

SSLCACertificateFile /home/httpd/conf/ssl.crt/ca.crt

SSLVerifyClient require
SSLVerifyDepth  2

 通过上述设置就可以实现IE和apache server的双向认证了。

/*****************************************************/

openssl的相关的三个命令

/*****************************************************/

openssl简介-指令genrsa

用法:

openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea]

[-f4] [-3] [-rand file(s)] [numbits]

DESCRIPTION
生成RSA私有密钥的工具。

OPTIONS
-out filename
私有密钥输入文件名,缺省为标准输出。
the output filename. If this argument is not specified then standard output is uused.
-passout arg
参看指令dsa里面的passout参数说明
-des|-des3|-idea
采用什么加密算法来加密我们的密钥。一般会要你输入保护密码。
如果这三个中一个也没set, 我们的密钥将不被加密而输入。
-F4|-3
使用的公共组件,一种是3, 一种是F4, 我也没弄懂这个option是什么意思。
-rand file(s)
产生key的时候用过seed的文件,可以把多个文件用冒号分开一起做seed.
numbits
指明产生的参数的长度。必须是本指令的最后一个参数。如果没有指明,则产生512bit长的参数。
研究过RSA算法的人肯定知道,RSA的私有密钥其实就是三个数字,其中俩个是质数。这俩个呢,就叫prime numbers.产生RSA私有密钥的关键就是产生这俩。还有一些其他的参数,引导着整个私有密钥产生的过程。因为产生私有密钥过程需要很多随机数,这个过程的时间是不固定的。
产生prime numbers的算法有个bug, 它不能产生短的primes. key的bits起码要有64位。一般我们都用1024bit的key.

openssl简介-指令req

用法:

openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename]

[-passin arg] [-out filename] [-passout arg] [-text] [-noout]

[-verify] [-modulus] [-new] [-rand file(s)] [-newkey rsa:bits]

[-newkey dsa:file] [-nodes] [-key filename] [-keyform PEM|DER]

[-keyout filename] [-[md5|sha1|md2|mdc2]] [-config filename]

[-x509] [-days n] [-asn1-kludge] [-newhdr] [-extensions section]

[-reqexts section]

描述:
本指令用来创建和处理PKCS#10格式的证书.它还能够建立自签名证书,做Root CA.

OPTIONS
-inform DER|PEM
指定输入的格式是DEM还是DER. DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式.你去看看你做出来的那些.key, .crt文件一般都是PEM格式的,第一行和最后一行指明内容,中间就是经过编码的东西。
-outform DER|PEM
和上一个差不多,不同的是指定输出格式
-in filename
要处理的CSR的文件名称,只有-new和-newkey俩个option没有被set,本option才有效
-passin arg
去看看CA那一章关于这个option的解释吧。
-out filename
要输出的文件名
-passout arg
参看dsa指令里的passout这个option的解释吧.
-text
将CSR文件里的内容以可读方式打印出来
-noout
不要打印CSR文件的编码版本信息.
-modulus
将CSR里面的包含的公共米要的系数打印出来.
-verify
检验请求文件里的签名信息.
-new
本option产生一个新的CSR, 它会要用户输入创建CSR的一些必须的信息.至于需要哪些信息,是在config文件里面定义好了的.如果-key没有被set, 那么就将根据config文件里的信息先产生一对新的RSA密钥
-rand file(s)
产生key的时候用过seed的文件,可以把多个文件用冒号分开一起做seed.
-newkey arg
同时生成新的私有密钥文件和CSR文件. 本option是带参数的.如果是产生RSA的私有密钥文件,参数是一个数字, 指明私有密钥bit的长度. 如果是产生DSA的私有密钥文件,参数是DSA密钥参数文件的文件名.
-key filename
参数filename指明我们的私有密钥文件名.允许该文件的格式是PKCS#8.
-keyform DER|PEM
指定输入的私有密钥文件的格式是DEM还是DER. DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式.你去看看你做出来的那些.key, .crt文件一般都是PEM格式的,第一行和最后一行指明内容,中间就是经过编码的东西。
-outform DER|PEM
和上一个差不多,不同的是指定输出格式
-keyform PEM|DER
私有密钥文件的格式, 缺省是PEM
-keyout filename
指明创建的新的私有密钥文件的文件名. 如果该option没有被set, 将使用config文件里面指定的文件名.
-nodes
本option被set的话,生成的私有密钥文件将不会被加密.
-[md5|sha1|md2|mdc2]
指明签发的证书使用什么哈希算法.如果没有被set, 将使用config文件里的相应item的设置. 但DSA的CSR将忽略这个option, 而采用SHA1哈希算法.
-config filename
使用的config文件的名称. 本option如果没有set, 将使用缺省的config文件.
-x509
本option将产生自签名的证书. 一般用来错测试用,或者自己玩下做个Root CA.证书的扩展项在 config文件里面指定.
-days n
如果-509被set, 那么这个option的参数指定我们自己的CA给人家签证书的有效期.缺省是30天.
-extensions section -reqexts section
这俩个option指定config文件里面的与证书扩展和证书请求扩展有关的俩个section的名字(如果-x509这个option被set).这样你可以在config文件里弄几个不同的与证书扩展有关的section, 然后为了不同的目的给CSR签名的时候指明不同的section来控制签名的行为.
-asn1-kludge
缺省的req指令输出完全符合PKCS10格式的CSR, 但有的CA仅仅接受一种非正常格式的CSR, 这个option的set就可以输出那种格式的CSR. 要解释这俩种格式有点麻烦, 需要用到ASN1和PKCS的知识,而且现在这样子怪的CA几乎没有,所以省略解释
-newhdr
在CSR问的第一行和最后一行中加一个单词"NEW", 有的软件(netscape certificate server)和有的CA就有这样子的怪癖嗜好.如果那些必须要的option的参数没有在命令行给出,那么就会到config文件里去查看是否有缺省值, 然后时候。config文件中相关的一些KEY的解释与本指令有关的KEY都在[req]这个section里面.
input_password output_password
私有密钥文件的密码和把密码输出的文件名.同指令的passin, passout的意义相同.
default_bits
指定产生的私有密钥长度, 如果为空,那么就用512.只有-new被set, 这个设置才起作用,意义同-newkey相同.
default_keyfile
指定输出私有密钥文件名,如果为空, 将输出到标准输入,意义同-keyout相同.
oid_file
oid_section
与oid文件有关的项, oid不清楚是什么东西来的.
RANDFILE
产生随机数字的时候用过seed的文件,可以把多个文件用冒号分开一起做seed.
encrypt_key
如果本KEY设置为no, 那么如果生成一个私有密钥文件,将不被加密.同命令行的-nodes的意义相同.
default_md
指定签名的时候使用的哈希算法,缺省为MD5. 命令行里有同样的功能输入.
string_mask
屏蔽掉某些类型的字符格式. 不要乱改这个KEY的值!!有的字符格式netscape不支持,所以乱改这个KEY很危险.
req_extensions
指明证书请求扩展section, 然后由那个secion指明扩展的特性. openssl的缺省config文件里, 扩展的是X509v3, 不扩展的是x509v1.这个KEY的意义和命令行里-reqexts相同.
x509_extensions
同命令行的-extension的意义相同.指明证书扩展的sesion, 由那个section指明证书扩展的特性.
prompt
如果这个KEY设置为no, 那么在生成证书的时候需要的那些信息将从config文件里读入,而不是从标准输入由用户去输入, 同时改变下俩个KEY所指明的section的格式.
attributes
一个过时了的东西, 不知道也罢. 不过它的意义和下一个KEY有点类似,
格式则完全相同.

distinguished_name
指定一个section, 由那个section指定在生成证书或者CRS的时候需要的资料.该section的格式如下:
其格式有俩种, 如果KEY prompt被set成no(看看prompt的解释), 那么这个secion的格式看起来就是这样子的:
CN=My Name
OU=My Organization
[email protected]
就说只包括了字段和值。这样子可以可以让其他外部程序生成一个摸板文件,包含所有字段和值, 把这些值提出来.等下举例时间会有详细说明.如果prompt没有被set成no, 那么这个section的格式则如下:
fieldName="please input ur name"

fieldName_default="fordesign"

fieldName_min= 3

fieldName_max= 18

"fieldname"就是字段名, 比如commonName(或者CN). fieldName(本例中是"prompt")是用来提示用户输入相关的资料的.如果用户什么都不输, 那么就使用确省值.如果没有缺省值, 那么该字段被忽略.用户如果输入 '.' ,也可以让该字段被忽略.
用户输入的字节数必须在fieldName_min和fieldName_max之间. 不同的section还可能对输入的字符有特殊规定,比如必须是可打印字符.那么在本例里面, 程序的表现将如下:
首先把fieldName打印出来给用户以提示
please input ur name:
之后如果用户必须输入3到18之间的一个长度的字符串, 如果用户什么也不输入,那么就把fieldName_default里面的值"fordesign"作为该字段的值添入.
有的字段可以被重复使用.这就产生了一个问题, config文件是不允许同样的section文件里面有多于一个的相同的key的.其实这很容易解决,比如把它们的名字分别叫做 "1.organizationName", "2.organizationName"
openssl在编译的时候封装了最必须的几个字段, 比如commonName, countryName, localityName, organizationName,organizationUnitName, stateOrPrivinceName还增加了emailAddress surname, givenName initials 和 dnQualifier.
举例时间:
就使用确省值.如果没有缺省值, 那么该字段被忽略.用户如果输入 '.' ,也可以让该字段被忽略.用户输入的字节数必须在fieldName_min和fieldName_max之间. 不同的section还可能对输入的字符有特殊规定,比如必须是可打印字符.那么在本例里面, 程序的表现将如下:
首先把fieldName打印出来给用户以提示
please input ur name:
之后如果用户必须输入3到18之间的一个长度的字符串, 如果用户什么也不输入,那么就把fieldName_default里面的值"fordesign"作为该字段的值添入.
有的字段可以被重复使用.这就产生了一个问题, config文件是不允许同样的section文件里面有多于一个的相同的key的.其实这很容易解决,比如把它们的名字分别叫做 "1.organizationName", "2.organizationName" openssl在编译的时候封装了最必须的几个字段,比如commonName,countryName,localityName, organizationName,organizationUnitName, stateOrPrivinceName还增加了emailAddress surname, givenName initials 和 dnQualifier.
举例时间:
Examine and verify certificate request:
检查和验证CSR文件.
openssl req -in req.pem -text -verify -noout
做自己的私有密钥文件, 然后用这个文件生成CSR文件.
openssl genrsa -out key.pem 1024
openssl req -new -key key.pem -out req.pem
也可以一步就搞定:
openssl req -newkey rsa:1024 -keyout key.pem -out req.pem
做一个自签名的给Root CA用的证书:
openssl req -x509 -newkey rsa:1024 -keyout key.pem -out crt.pem
下面是与本指令有关的config文件中相关的部分的一个例子:
[ req ]
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca
dirstring_type = nobmp
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = AU
countryName_min = 2
countryName_max = 2
localityName = Locality Name (eg, city)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (eg, YOUR name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 40
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints = CA:true
RANDFILE = $ENV::HOME/.rnd
[ req ]
default_bits = 1024
default_keyfile = keyfile.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
prompt = no
output_password = mypass
[ req_distinguished_name ]
C = GB
ST = Test State or Province
L = Test Locality
O = Organization Name
OU = Organizational Unit Name
CN = Common Name
emailAddress = [email protected]
[ req_attributes ]
challengePassword = A challenge password
一般的PEM格式的CSR文件的开头和结尾一行如下
-----BEGIN CERTIFICATE REQUEST----
-----END CERTIFICATE REQUEST----
但个把变态软件和CA硬是需要CSR的文件要这样子:
-----BEGIN NEW CERTIFICATE REQUEST----
-----END NEW CERTIFICATE REQUEST----
用-newhdr就可以啦, 或者你自己手工加也中.openssl对俩种格式都承认.
openssl的config文件也可以用环境变量OPENSSL_CONF或者SSLEAY_CONF来指定.

openssl简介-指令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 = [email protected]

-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 protected]
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 protected]
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:D0:F5:EC:11:7F:0A:01:53:58:4E:0B:7C:F7
X509v3 Authority Key Identifier:
keyid:69:41:87:55:BD:52:99:D0: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 protected]
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没有冲突。

一些链接:

http://bbs.chinaunix.net/forum/viewtopic.php?t=523585

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载