openssl cookbook笔记

来源:互联网 发布:数控车床外圆锥度编程 编辑:程序博客网 时间:2024/05/22 10:37

openssl cookbook

https://www.feistyduck.com/books/openssl-cookbook/

关于ecc签名密钥

在openssl cookbook中提到,大多数主流的浏览器只支持两种曲线 secp256r1 (OpenSSL uses the name prime256v1) and secp384r1.

密钥的产生

openss生成的密钥文件格式是pem的文本文件格式,在生成公钥密码后可以使用命令把公钥剥离出来。

在web server使用ssl协议时,可选的密钥类型有rsa,ecdsa,dsa密钥,现在一般使用的是rsa,dsa的密钥在ie浏览器中只支持1024的,ecdsa被多数的ca支持,在ssh中这三种均被广泛使用,但是ecdsa可能不被有些client支持。

web server支持ssl

(1)首先,产生足够安全的私钥。

(2)再次,创建证书签名请求csr,并发送给CA。(csr中包含了实体的公钥以及实体的一些信息,这些将全部作为证书的一部分。同时,csr是用公钥对应的私钥签名了的)

openssl提供了命令行来产生相应的证书签名请求,这个命令是交互式的,需要自己输入相应的主体信息,在交互过程中,有一个选项是challenge psaawd,在openssl cookbook中讲到,此passwd是用来在证书撤销的时候作为对证书请求实体的身份认证的一种方式,但是经常不被使用,因为它并没有增加csr的安全性。

在csr请求生成后,需要验证它的正确性。也可以使用原有的证书来生成CSR。

openssl x509 -x509toreq -in fd.crt -out fd.csr -signkey fd.key

在openssl中产生CSR也可以采用自动的方式(也就是不交互的方式),这种方式需要我们提前写好定制的openssl配置文件(*.cnf),并在使用生成csr的时候指定配置文件。

openssl req -new -config fd.cnf -key fd.key -out fd.csr

(3)最后, 安装ca提供的证书。

web server的证书签发

一定要注意用户可能的输入是www.xx.com或者是xx.com,而颁发证书的时候只能有一个common name,不能为所有的域名颁发证书(实际上是同一个网站)。解决这个问题的方法有两种,一种是使用x509的扩展列出所有的域名(Subject Alternative Name(SAN)),另一种是使用通配符(wildcard),如,使用feistyduck.com和.feistyduck.com。具体操作是单独建立一个.ext的文件,在生成证书的时候指定这个文件。

证书和密钥的存储格式

(1)证书由der编码的和base64编码的der证书pem。其中der是以原始证书的二进制编码;pem是文本形式的,有begin certificate和end certificate标记。

(2)同样的密钥也有两种上面的两种编码方式。

(3)x509格式的证书和pkcs7、pkcs12格式的证书之间可以相互转换。

使用openssl的req和ca

(1)在使用配置文件(-config)生成CSR和证书过程中,如果在配置文件中的DN域中设置了最大国家名长度(countryName_max)选项,openssl会报错first num is too large……,即使设置的国家名满足设置的要求(两个字符)。

解决办法是直接注释掉countryName_max,commonName_max。

(2)在使用这个命令来生成证书的时候,在最后一步,会跳出提示询问是不是要颁发证书,让输入(y/n)。但是在使用时程序根本不会停下来让输入,并且紧接着输出了一句提示certificat will not be certificated。奇怪的是在签发其他类型的证书时,并没有遇到这种情况,所以推断是配置文件中出了问题。但是在仔细查看了配置文件,暂时没有发现什么不妥(可能是对配置文件中的某些选项认识不够到位)。

解决办法:在使用这些命令的时候,使用-batch模式,这样就可以跳过openssl的询问提示,直接签发了。

证书吊销

证书吊销原因是不能乱写的,是固定好的几种选项。
unspecified, keyCompromise, CACompromise, affiliationChanged, superseded, cessationOfOperation, certificateHold, and removeFromCRL。

部署TLS

加密套件的选择。使用命令openssl ciphers -v ‘ALL:COMPLEMENTOFALL’ -V可以查看所有的openssl支持的加密套件。其中显示的第一列是每个套件的ID,第二列是每个套件的名称,第三列是需要的最低协议版本,第四列是密钥交换算法,第五列是认证算法,第六列是加密算法和强度,第七列是MAC(完整性验证)算法。

原创粉丝点击