使用 OpenSSL 生产自签名 SSL 证书过程
操作步骤
* openssl版本:1.0.2k
- 生成根证书私钥
利用openssl命令的子命令genrsa生成私钥,然后再使用子命令rsa私钥中提取公钥。
openssl genrsa -out ca.key 2048
- 使用默认的加密算法是rsa
- 指明生成的私钥大小是2048;
- 生成根证书请求文件(CSR)
比如我自己的网站,需要使用https 通信,那么我向“证书机构”申请数字证书的时候,就需要向他们提供相应的信息,这些信息以特定文件格式(.csr)提供的,这个文件就是“证书请求文件”;
openssl req -new -key ca.key -out ca.csr -subj "/CN=etcd-ca"
- 生成根证书(CA)
openssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -days 3650
-new:表示生成一个新的证书签署请求;
-x509:专用于生成CA自签证书;
-key:指定生成证书用到的私钥文件;
-out FILNAME:指定生成的证书的保存路径;
-days:指定证书的有效期限,单位为day,默认是365天;
此时得到:
- 根证书私钥:ca.key
- 根证书请求文件:ca.csr
- 根证书: ca.crt
- 生成服务端私钥
openssl genrsa -out server.key 2048
- 生成服务端请求文件
openssl req -new -key server.key -out server.csr -subj "/CN=etcd-ca"
- 生成服务端证书
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
参数项说明:
主要选项:
-in filename : #指定证书输入文件,若同时指定了"-req"选项,则表示输入文件为证书请求文件。
-out filename : #指定输出文件
-md2|-md5|-sha1|-mdc2: #指定单向加密的算法。
查看证书选项:
-text :以text格式输出证书内容,即以最全格式输出,
:包括public key,signature algorithms,issuer和subject names,serial number以及any trust settings.
-certopt option:自定义要输出的项
-noout :禁止输出证书请求文件中的编码部分
-pubkey :输出证书中的公钥
-modulus :输出证书中公钥模块部分
-serial :输出证书的序列号
-subject :输出证书中的subject
-issuer :输出证书中的issuer,即颁发者的subject
-subject_hash:输出证书中subject的hash码
-issuer_hash :输出证书中issuer(即颁发者的subject)的hash码
-hash :等价于"-subject_hash",但此项是为了向后兼容才提供的选项
-email :输出证书中的email地址,如果有email的话
-startdate :输出证书有效期的起始日期
-enddate :输出证书有效期的终止日期
-dates :输出证书有效期,等价于"startdate+enddate"
-fingerprint :输出指纹摘要信息
-signkey filename :该选项指定签名秘钥(秘钥必须是输入文件的私钥),并使得由-in 提供的输入文件转成自签名的证书。
- in :自签署的输入文件"-in file"的file可以是证书请求文件,也可以是已签署过的证书。会使用文件中的subject name 作为issuer name.
-x509toreq :将已签署的证书转换回证书请求文件。需要使用"-signkey"选项来传递需要的私钥。
-req :x509工具默认以证书文件做为inputfile(-in file),指定该选项将使得input file的file为证书请求文件。
-set_serial n :指定证书序列号。该选项可以和"-singkey"或"-CA"选项一起使用。
:如果和"-CA"一起使用,则"-CAserial"或"-CAcreateserial"选项指定的serial值将失效。
:序列号可以使用数值或16进制值(0x开头)。也接受负值,但是不建议。
-CA filename :指定签署时所使用的CA证书。该选项一般和"-req"选项一起使用,用于为证书请求文件签署。
-CAkey filename :设置CA签署时使用的私钥文件。如果该选项没有指定,将假定CA私钥已经存在于CA自签名的证书文件中。
-CAserial filename:设置CA使用的序列号文件。当使用"-CA"选项来签名时,它将会使用某个文件中指定的序列号来唯一标识此次签名后的证书文件。
:这个序列号文件的内容仅只有一行,这一行的值为16进制的数字。当某个序列号被使用后,该文件中的序列号将自动增加。
:默认序列号文件以CA证书文件基名加".srl"为后缀命名。如CA证书为"mycert.pem",则默认寻找的序列号文件为"mycert.srl"
-CAcreateserial :当使用该选项时,如果CA使用的序列号文件不存在将自动创建:该文件将包含序列号值"02"并且此次签名后证书文件序列号为1。
:一般如果使用了"-CA"选项而序列号文件不存在将会产生错误"找不到srl文件"。
证书扩展选项:
-purpose:选项检查证书的扩展项并决定该证书允许用于哪些方面,即证书使用目的范围。
- 查看证书信息
openssl x509 -in server.crt -noout -serial -dates -subject