CRL OPTIONS
-gencrl
this option generates a CRL based on information in the index file. -crldays num
the number of days before the next CRL is due. That is the days from
now to place in the CRL nextUpdate field.
-crlhours num
the number of hours before the next CRL is due.
-revoke filename
a filename containing a certificate to revoke.
-crlexts section
the section of the configuration file containing CRL extensions to
include. If no CRL extension section is present then a V1 CRL is created,
if the CRL extension section is present (even if it is empty) then a V2
CRL is created. The CRL extensions specified are CRL extensions and not
CRL entry extensions. It should be noted that some software (for example
Netscape) can‘t handle V2 CRLs.
相信刚才大家都看到很多选项都和config文件有关,那么我们来解释一下config文件make install之后,openssl会生成一个全是缺省值的config文件:openssl.cnf.也长的很,贴出来有赚篇幅之嫌,xgh不屑。简单解释一下其中与CA有关的key. 与CA有关的key都在ca这个section之中。 [ ca ]
default_ca = CA_default [ CA_default ]
dir = ./demoCA # Where everything is kept certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file.
new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/cacert.pem # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem# The private key RANDFILE = $dir/private/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs # so this is commented out by default to leave a V1 CRL. # crl_extensions = crl_ext
default_days = 365 # how long to certify for
default_crl_days= 30 # how long before next CRL default_md = md5 # which md to use. preserve = no # keep passed DN ordering
# A few difference way of specifying how similar the request should look # For type CA, the listed attributes must be the same, and the optional # and supplied fields are just that :-) policy = policy_match # For the CA policy [ policy_match ] countryName = match
stateOrProvinceName = match organizationName = match
organizationalUnitName = optional commonName = supplied
emailAddress = optional
# At this point in time, you must list all acceptable ‘object‘ # types.
[ policy_anything ]
countryName = optional stateOrProvinceName = optional localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied emailAddress = optional
config文件里CA section里面的很多key都和命令行参数是对应的。
如果某个key后面标明mandatory,那就说明这个参数是必须提供的,无论你通过命令行还是通过config文件去提供。
new_certs_dir
本key同命令行的 -outdir意义相同。(mandatory) certificate
同命令行的 -cert意义相同。(mandatory)
private_key
同命令行-keyfile意义相同.(mandatory)
RANDFILE
指明一个用来读写时候产生random key的seed文件。具体意义在以后的RAND的API再给出解释。(不是我摆谱,我觉得重复解释没有必要) default_days
意义和命令行的 -days相同。
default_startdate
意义同命令行的 -startdate相同。如果没有的话那么就使用产生证书的时间。 default_enddate
意义同命令行的 -enddate相同。(mandatory). crl_extensions
preserve
default_crl_hours default_crl_days CRL的东西.....自己都没弄懂..... default_md
同命令行的-md意义相同. (mandatory)
database
记得index.txt是什么文件吗?不记得自己往前找。这个key就是指定index.txt的。初始化是空文件。
serialfile
指明一个txt文件,里面必须包含下一个可用的16进制数字,用来给下一个证书做系列号。(mandatory)
x509_extensions
意义同 -extensions相同。 msie_hack
意义同-msie_hack相同。
policy
意义同-policy相同。自己看看这一块是怎么回事。(mandatory) [ policy_match ]
countryName = match
stateOrProvinceName = match organizationName = match
organizationalUnitName = optional
commonName = supplied emailAddress = optional
其实如果你做过CSR就会明白,这些项就是你做CSR时候填写的那些东西麻。 后面的\\等又是什么意思呢?\表示说明你填写的这一栏一定要和CA本身的证书里面的这一栏相同。supplied表示本栏必须,optional就表示本栏可以不填写。
举例时间到了:
注意,本例中我们先要在 $OPENSSL/misc下面运行过CA.sh -newca,建立好相应的目录,所有需要的文件,包括CA的私有密钥文件,证书文件,系列号文件,和一个空的index文件。并且文件都已经各就各位。放心把,产生文件和文件就位都由CA.sh搞定,你要做的
就是运行CA.sh -nweca就行了,甚至在你的系列号文件中还有个01,用来给下一个证书做系列号。
给一个CSR签名:
openssl ca -in req.pem -out newcert.pem 给一个CSR签名, 产生x509v3证书:
openssl ca -in req.pem -extensions v3_ca -out newcert.pem 同时给数个CSR签名:
openssl ca -infiles req1.pem req2.pem req3.pem 注意:
index.txt文件是整个处理过程中很重要的一部分,如果这玩意坏了,很难修复。理论上根据已经颁发的证书和当前的CRL当然是有办法修复的啦,但openssl没提供这个功能。:( openssl还有俩大类指令: crl, crl2pkcs7, 都是和CRL有关的, 由于我们对这个没有兴趣,所以这俩大类不做翻译和解释。
--------------------------------------------------------------------------------
openssl简介-指令cipher
说明:cipher就是加密算法的意思。ssl的cipher主要是对称加密算法和不对称加密算法的组合。 本指令是用来展示用于SSL加密算法的工具。它能够把所有openssl支持的加密算法按照一定规律排列(一般是加密强度)。这样可以用来做测试工具,决定使用什么加密算法。
用法:
openssl ciphers [-v] [-ssl2] [-ssl3] [-tls1] [cipherlist]
COMMAND OPTIONS -v
详细列出所有符合的cipher的所有细节。列出该cipher使用的ssl的版本,公共密钥交换算法,身份验证方法,对称加密算法以及哈希算法。还列出该算法是否可以出口。[/b:75001d2270]
算法出口? 趁这个机会可以给大家来点革命教育。米国的加密算法研究是世界上最先进的,其国家安全局(NSA)在这方面的研究水平已经多次证明比\最先进水平\领先10到15年。他们的预算据说是每年200亿美圆。他们的数学家比你知道的还多,他们还是全世界最大的计算机硬件买家。DES就是他们最先弄出来的。到了70年代,IBM也有人在实现室弄出这个算法。都弄出来30年了,还使用的这么广泛。
该算法的最隐蔽的是一个叫S匣的东西,是一个常数矩阵。研究DES你就会知道这玩意。因为NSA和IBM都没有给出这个S匣的解释,所以大家都怀疑使用这个东西是否是NSA和IBM搞出来的后门?
一直到了90年代,才有俩个以色列人发现了原因,这个是为了对付一种叫什么微分密码分析的破解法而如此设置的,对S匣的任何改动都将使微分密码分析比较容易的将DES给K掉。S匣不仅不是后门,还是最大限度的增加了加密强度。
说远了,大意就是:老米在这方面领先的可怕。但他们怕他们的研究成果给其他国家的人用,搞的自己也破解不了,那就麻烦了。所以他们用法律规定了,一定强度以上的加密算法禁止给其他国家用。那些加密强度很弱的就可以出口。
这个故事教育我们,为了中国的崛起,还有很多路要走呐。 如果没有-v这个参数, 很多cipher可能重复出现,因为他们可以同时被不同版本的SSL协议使用。
-ssl3
只列出SSLv3使用的ciphers -ssl2
只列出SSLv2使用的ciphers
-tls1
只列出TLSv1使用的ciphers -h, -?
打印帮助信息
cipherlist
列出一个cipher list的详细内容。一般都这么用:
openssl -v XXXXX
这个XXXXX就是cipher list.如果是空的话,那么XXXXX代表所有的cipher. CIPHER LIST 的格式
cipher list由许多cipher string组成,由冒号,逗号或者空格分隔开。但一般最常用的是用冒号。
cipher string又是什么?
它可以仅仅包含一个cipher, 比如RC4-SHA. 它也可以仅仅包含一个加密算法,比如SHA, 那就表示所有用到SHA的cipher都得列出来。
你还可以使用三个符号来捏合各种不同的cipher,做出cipher string.这三个符号是 +, -, !。我想这个很好理解吧,MD5+DES表示同时使用了这俩种算法的cipher,!SHA就表示所有没有有用到SHA的cipher, IDEA-CBC就表示使用了IDEA而没有使用CBC的所有cipher. openssl还缺省的定义了一些通用的cipher string, 有: DEFAULT: 缺省的cipher list. ALL: 所有的cipher
HIGH, LOW, MEDIUM: 分别代表 高强度,中等强度和底强度的cipher list.具体一点就是对称加密算法的key的长度分别是 >128bit <128bit和 ==128bit的cipher.
EXP, EXPORT, EXPORT40: 老米的垄断体现,前俩者代表法律允许出口的加密算法,包括40bit, 56bit长度的key的算法,后者表示只有40bit长度的key的加密算法。 eNULL, NULL: 表示不加密的算法。(那也叫加密算法吗?)
aNULL: 不提供身份验证的加密算法。目前只有DH一种。该算法很容易被监听者,路由器等中间设备攻击,所以不提倡使用。
下表列出了SSL/TLS使用的cipher, 以及openssl里面如何表示这些cipher. SSL v3.0 cipher suites OPENLLS表示方法
SSL_RSA_WITH_NULL_MD5 NULL-MD5