1.采用自定义配置文件的实现方法
自建CA
自建CA的机制:1.生成私钥;2.创建证书请求;3.使用私钥对证书请求签名。
由于测试环境,所以自建的CA只能是根CA。所使用的配置文件如下。
[default] name = root-ca /* 变量*/ default_ca = CA_default name_opt = ca_default cert_opt = ca_default [CA_default] home = . /* 变量*/ database = $home/db/index serial = $home/db/serial crlnumber = $home/db/crlnumber certificate = $home/$name.crt private_key = $home/private/$ RANDFILE = $home/private/random new_certs_dir = $home/certs unique_subject = no copy_extensions = none default_days = 3650 default_crl_days = 365 default_md = sha256 policy = policy_to_match [policy_to_match] countryName = match stateOrProvinceName = optional organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [CA_DN] countryName = "C" contryName_default = "CN" organizationName = "O" organizationName_default = "jmu" commonName = "CN" commonName_default = "" [req] default_bits = 4096 encrypt_key = no default_md = sha256 utf8 = yes string_mask = utf8only # prompt = no /* 测试时该选项导致出错,所以将其注释掉*/ distinguished_name = CA_DN req_extensions = ca_ext [ca_ext] basicConstraints = critical,CA:true keyUsage = critical,keyCertSign,cRLSign subjectKeyIdentifier = hash
(1).创建openssl的目录结构
(a).创建配置文件
[root@xuexi ~]# mkdir /ssl;touch /ssl/ [root@xuexi ~]# cd /ssl [root@xuexi ssl]# vim
(b).创建openssl的目录结构中的目录,在上述配置文件中的目录分别为/ssl/db、/ssl/private和/ssl/certs,可以考虑将private目录的权限设置为600或者400。
[root@xuexi ssl]# mkdir /ssl/{db,private,certs} [root@xuexi ssl]# chmod -R 400 private/
(2).CA自签名
普通的证书请求需要使用CA的私钥进行签名变成证书,既然是自签名证书那当然是使用自己的私钥来签名。可以使用伪命令req、ca、x509来自签名。
使用req伪命令创建CA
这里有两种方法:1.一步完成,即私钥、证书请求、自签名都在一个命令中完成2.分步完成,先生成私钥、再创建证书请求、再指定私钥来签名。方法2中其实生成私钥和证书申请可以合并在一步中完成,证书申请和签名也可以合并在一步中完成。
方法一:一步完成
在下面的一步命令中,使用-new由于没有指定私钥输出位置,所以自动保存在中default_keyfile指定的中;由于中的req段设置了encrypt_key=no,所以交互时不需要输入私钥的加密密码;由于使用req -x509自签名的证书有效期默认为30天,而配置文件中req段又不能配置该期限,所以只能使用-days来指定有效期限,注意这个-days选项只作用于x509签名,证书请求中如果指定了时间是无效的。
[root@xuexi ssl]# openssl req -x509 -new -out req.crt -config -days 365 [root@xuexi ssl]# ll total 24 drwxr-xr-x 2 root root 4096 Nov 2209:05 certs drwxr-xr-x 2 root root 4096 Nov 2209:05 db drwx------ 2 root root 4096 Nov 2209:05 private -rw-r--r-- 1 root root 3272 Nov 2210:52 /* 注意权限为644 */ -rw-r--r-- 1 root root 1753 Nov 2210:52 req.crt -rw-r--r-- 1 root root 1580 Nov 2210:51 [root@xuexi ssl]# openssl x509 -noout -dates -in req.crt notBefore=Nov 2202:52:242016 GMT notAfter=Nov 2202:52:242017 GMT
方法二:分步完成,这里把各种可能的步骤合并都演示一遍
>>创建私钥和证书请求合并而签名独自进行的方法独自生成私钥,而请求和签名合并的方法完全分步进行 /etc/pki/CA/serial
[root@xuexi tmp]# openssl genrsa -out /etc/pki/CA/private/ca # 创建CA的私钥
[root@xuexi tmp]# openssl req -new -key /etc/pki/CA/private/ca -out rootCA.csr # 创建CA待自签署的证书请求文件
[root@xuexi tmp]# openssl ca -selfsign -in rootCA.csr # 自签署
[root@xuexi tmp]# cp /etc/pki/CA/newcerts/01.pem /etc/pki/CA/cacert.pem # 将自签署的证书按照配置文件的配置复制到指定位置
为他人颁发证书的过程:
[root@xuexi tmp]# openssl ca -in youwant1.csr
签署成功后,证书位于/etc/pki/CA/newcert目录下,将新生成的证书文件发送给申请者即可。