在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环境