使用OpenSSL生成多域名自签名证书
证书生成过程介绍
证书的目的是建立特定密钥对与特定实体之间的联系。
自签名根证书是指一堆密钥对的私钥对自己相应的公钥生成的证书请求进行签名而颁发的证书,证书的申请人和签发人都是同一个。
- 需要一对密钥对;
常用的是RSA,DSA密钥,ECDSA密钥,用于密钥交换的证书不能用DSA,只能用RSA,因为DSA不能加解密也不能做密钥交换,只能做签名;ECDSA还没有被大部分的CA支持;
- 证书认证请求文件(csr文件)
这是按照一定格式生成的文件,里面包含实体信息
将实体信息和公钥一起用相应的私钥签名,是CA(证书认证)能确认这些信息是用户发送的(证书请求中的公钥拿出来验证这个证书请求的签名)
通过OpenSSL的req指令填写和生成这个csr文件
不同的CA要求,可能需要更改默认的配置文件openssl.cnf - 将证书请求文件(csr文件)给CA签发
验证证书请求上的签名是否正确,确保公钥对应的私钥就在申请者手中并且申请信息是正确没被更改的
CA对某些字段信息可能有特殊的要求,比如要求国家,身份等信息要求跟CA本身设定的一样
如果CA是在OpenSSL指令的基础上,那么它使用的签发指令可能是ca,也可能是x509
常用指令
req 指令
req指令既可以直接生成一个新的自签名证书,也可以根据现有的证书请求和其相应私钥生成自签名根证书。如果是根据现有证书请求生成自签名根证书,那么一定要-key选项指定相应的私钥指令才能执行成功。
req 指令也可以生成密钥对,但在使用req 同时生成密钥对是对密钥对保存和格式有限制(只能是PEM编码,DES3-CBC模式加密)。如果需要更灵活的处理,可以使用genrsa或者gendsa先生成密钥然后使用-key选项指定。
参数选项
- -new 指定执行生成新的证书请求,此时会忽略
-in
指定的内容 - -x509 根据现有的证书请求生成自签名根证书(要求使用
-key
指定证书请求里面的公钥相应的私钥,以便对自签名根证书进行签名) - -key 指定输入的密钥,如果不指定此选项会根据
-newkey
选项的参数生成密钥对 - -newkey 指定生成一个新的密钥对,只有在没有
-key
选项的时候才生效,参数形式为rsa:numbits 或者 dsa:file - -subj直接从指令行指定证书请求的主体名称,格式为/分割的键值对字符串,如果没有此选项,那么会弹出交互提示;
- -days 设定了生成的自签名根证书的有效期,单位为天;该选项只有在使用了
-x509
选项生成自签名证书的时候才生效,默认为30天。
- -config 指定req指令在生成证书请求的时候使用的OpenSSL配置文件,一般默认为
op