在Ubuntu下使用OpenSSL搭建CA

在Ubuntu下使用OpenSSL搭建CA

我使用的环境是Ubuntu 20.04.1 LTS

建立CA目录结构

在主目录下输入如下命令,建立CA目录结构

mkdir ca
cd ca
mkdir newcerts private conf server users
  • newcerts目录将用于存放CA签署过的数字证书。
  • private目录用于存放CA的私钥。
  • conf目录用于存放简化参数用的配置文件。
  • server目录存放服务器证书文件。
  • users目录存放用户证书文件。

conf下的配置文件

cd conf
vim openssl.conf

在conf目录下新建一个包含如下信息的openssl.conf文件

 [ ca ]
 default_ca = foo
 [ foo ] 
 dir = /home/xieyi/ca
 database = /home/xieyi/ca/index.txt
 new_certs_dir = /home/xieyi/ca/newcerts
 certificate = /home/xieyi/ca/private/ca.crt
 serial = /home/xieyi/ca/serial
 private_key = /home/xieyi/ca/private/ca.key
 RANDFILE = /home/xieyi/ca/private/.rand
 default_days = 365
 default_crl_days = 30
 default_md = sha256
 unique_subject = no
 policy = policy_any
 [ policy_any ]
 countryName = match
 stateOrProvinceName = match
 organizationName = match
 organizationalUnitName = match
 localityName = optional
 commonName   = supplied
 emailAddress = optional

生成私钥和根证书

生成私钥key

cd ..
openssl genrsa -out private/ca.key

生成证书请求csr文件

openssl req -new -key private/ca.key -out private/ca.csr

生成根证书crt文件

openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt

为CA的key设置起始序列号

sudo echo FACE > serial

serial是证书签发时使用的序列号参考文件,该文件的序列号是以16进制格式进行存放的,该文件必须提供并且包含一个有效的序列号,序列号可以是任意四个字符

创建CA键库

touch index.txt

penSSL定义的已签发证书的文本数据库文件,这个文件通常在初始化的时候是空的

为移除客户端证书创建一个证书撤销列表

openssl ca -gencrl -out private/ca.crl -crldays 7 -config "/home/xieyi/ca/conf/openssl.conf"

生成客户端证书并为之签名

为客户端创建一个key

openssl genrsa -aes128 -out users/client.key 2048

创建key时会提示Enter pass phrase for users/client.key:

这是当前key的口令,防止本密钥泄漏后被人盗用,两次输入同一个密码

为客户端key创建一个证书签名请求csr文件

openssl req -new -key users/client.key -out users/client.csr

提示需要输入刚才为key设置的口令

这里的输入除了在Common Name中需修改为localhost外,其余均需与之前相同

使用根证书的key为客户端的key签名

openssl ca -md sha256 -in /home/xieyi/ca/users/client.csr -cert private/ca.crt -keyfile private/ca.key -out users/client.crt -config "/home/xieyi/ca/conf/openssl.conf"

当出现确认是否签名的提示时,两次都输入y

将证书转换为PKCS12文件

openssl pkcs12 -export -clcerts -in users/client.crt -inkey users/client.key -out users/client.p12

按照提示输入为客户端client.key设置的pass phrase

随后设置用于导出证书的密码:这个是客户端证书的保护密码,在安装客户端证书时需要输入这个密码

遇到的一些问题

  • 权限不够

    使用sudo su进入root模式获得最高权限

  • 生成的CA目录之后,无法将全部的文件移动,如关键的.key和.crt文件无法被移动

    使用zip -r ./ca.zip ./ca命令将CA目录做成压缩包,即可将CA的全部内容移动至Windows环境

posted @ 2020-10-25 21:58  临渊履冰  阅读(1660)  评论(0编辑  收藏  举报