使用自建 CA 证书签发一枚普通证书

ubuntu openssl 默认配置文件 /etc/ssl/openssl.cnf
查看证书 $openssl x509 -text -noout -in ustack.crt

TLS基于CA的身份认证基本原理是:首先验证方需要信任CA提供方自己的证书(CAcert),比如证书在操作系统的受信任证书列表中,或者用户通过 "安装根证书"等方式将 CA的公钥和私钥加入受信任列表;然后CA对被验证方的原始证书进行签名(私钥加密),生成最终的证书;验证方得到最终的证书后,利用CAcert中包含 的公钥进行解密,得到被验证方的原始证书
根据RSA的加密原理,如果用CA的公钥解密成功,说明该证书的确是用CA的私钥加密的,可以认为被验证方是可信的。

生成CA证书
openssl genrsa -out sign.key 2048 #私钥
openssl rsa -in sign.key -des3 -out sign.key #如果要对私钥进行传输/备份,建议先对私钥进行密码加密
#转无密码秘钥 openssl rsa -in server.key -out server.key.unsecur
openssl req -new -key sign.key -out sign.csr #证书请求,可以与证书相互转换
openssl x509 -days 3650 -req -in sign.csr -extensions v3_ca -signkey sign.key -out sign.crt #带ca扩展属性的CA证书,这里实际上是一个自签名证书

或者使用一条命令:

openssl req -newkey rsa:2048 -days 3650 -x509 -nodes -out root.cer

使用CA证书对其它证书进行签名的方法为:

openssl x509 -req -days 3650 -in ssl.csr -extensions v3_usr -CA sign.crt -CAkey sign.key -CAcreateserial -out ssl.crt
或者:
openssl ca -in ssl.csr -out ssl.crt -cert sign.crt -keyfile sign.key
#I am unable to access the ./demoCA/newcerts directory # ./demoCA/newcerts: No such file or directory # 解决办法是在你当前操作目录。新建demoCA\newcerts文件夹。然后再demoCA文件夹下新建一个空的index.txt文件。再新建一个serial文件,没有后缀。里面填入01。就OK了。
openssl使用:http://www.cnblogs.com/littlehann/p/3738141.html

创建多域名证书http://liaoph.com/openssl-san/
// 默认配置文件: /etc/ssl
带SAN扩展的证书请求 -> 签署成带扩展SAN的证书
配置文件找到 [ req ] 段落,加上下面的配置:
req_extetions = v3_req

这段配置表示在生成 CSR 文件时读取名叫 v3_req 的段落的配置信息,因此我们再在此配置文件中加入一段名为 v3_req 的配置:

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

这段配置中最重要的是在最后导入名为 alt_names 的配置段,因此我们还需要添加一个名为 [ alt_names ] 的配置段:

[ alt_names ]     
DNS.1 = www.ustack.in
DNS.2 = www.test.ustack.com
这里填入需要加入到 Subject Alternative Names 段落中的域名名称,可以写入多个,可以使用*通配符,不能使用ip

接着使用这个临时配置生成证书请求文件:

$ openssl req -new -nodes -keyout ustack.key -out ustack.csr -config 指定配置文件路径/openssl.cnf
签署的时候加 -extensions v3_req 和 -config

openssl ca -policy policy_anything -out ustack.crt -config /tmp/openssl.cnf -extensions v3_req -infiles ustack.csr
或者:
openssl x509 -req -days 3650 -in test.csr -extensions v3_req -extfile ./openssl.cnf -CA ca.crt -CAkey ca.key -CAcreateserial -out test.crt