只有先有CA服务器才能对后续自建的网站证书进行颁发和签署
1、 生成CA私钥文件caPrivate.key
openssl genrsa -des3 -out caPrivate.key 2048
#这里需要输入密码,不要密码请使用: openssl genrsa -out ca.key 2048
指令说明openssl genrsa -help
genrsa:用于生成密钥对的OpenSSL命令
-des3:用des3算法对生成的私钥加密
-out:输出文件保存位置
2048:表示秘钥强度也可以使1024
2、 生成CA自签证书caCert.crt
openssl req -new -x509 -key caPrivate.key -out caCert.crt -days 3650 -config ca.conf
#这里需要输入上一步设置的密码
-key:私钥文件(指明从某个私钥文件中提取公钥创建证书签署请求)
-out:指定证书文件存放在位置
-new:生成新的证书签署请求
-days:证书有效天数
-x509:生成自签证书,不带则表示生成证书签署请求
-config:证书应答文件,也可以手动输入dn信息
cat>ca.conf<<EOF
[req]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C = CN
ST = yourstate
L = yourcity
O = yourcommpany
OU = yourcommpany
CN = yourdomain.com
EOF
# 服务信息
cat>ca.conf<<EOF
[req]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C = CN
ST = ShangHai
L = ShangHai
O = mydomain
OU = mydomain
CN = harbor.mydomain.com
EOF
-config ca.conf / -subj 参数说明如下:
字段 字段含义 示例
/C= Country 国家 CN
/ST= State or Province 省 Guangdong
/L= Location or City 城市 Guangzhou
/O= Organization 组织或企业 xdevops
/OU= Organization Unit 部门 xdevops
/CN= Common Name 域名或IP gitlab.xdevops.cn
3、 其他
# 证书索引文件(默认没有需要创建)
touch /etc/pki/CA/index.txt
# 记录已签发的所有证书的序列号(每签发一个证书序号自动+1,需要创建)
echo 01 > /etc/pki/CA/serial
如果不创建以上两个文件,在CA签署证书时会有如下报错
Using configuration from /etc/pki/tls/openssl.cnf
/etc/pki/CA/index.txt: No such file or directory
unable to open '/etc/pki/CA/index.txt'
139991383811984:error:02001002:system library:fopen:No such file or directory:bss_file.c:402:fopen('/etc/pki/CA/index.txt','r')
139991383811984:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:
1、 生成服务器端私钥
openssl genrsa -out server.key 2048
2、 生成服务器端签名请求
openssl req -new -key server.key -out server.csr -config ca.conf
3、 服务器端证书签署
openssl ca -policy policy_anything -cert caCert.crt -keyfile caPrivate.key -in server.csr -out server.crt -days 3650
-in:证书请求签署文件
-out:签发后的证书文件
openssl x509 -in server.crt -noout -serial -subject
-noout:不获取证书本身数据信息(加密字符串)
-serial:获取证书序列号,对应CA服务器中/etc/pki/CA/index.txt的记录
-subject:获取DN信息,对应CA服务器中/etc/pki/CA/index.txt的记录
openssl ca -revoke server.crt
CA配置文件:/etc/pki/tls/openssl.cnf
诸如证书有效时间、存储路径、证书匹配选项等默认信息都可以从中查询并修改
# 先 生成有密码的私钥
openssl genrsa -des3 -out server.pass.key 2048
# 再 移除私钥中的密码
openssl rsa -in server.pass.key -out server.key
# 等同于 生成无密码的私钥
openssl genrsa -out server.key 2048
1、 生成CA私钥文件caPrivate.key
openssl genrsa -out server.key 2048
2、 生成服务器端签名请求
openssl req -new -key server.key -out server.csr -config ca.conf
3、使用私钥为证书签名
生成 服务器端[nginx/Apache] 的证书,格式是x509的PEM格式
openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 3650
# 或
openssl x509 -req -in server.csr -out server.crt -outform pem -signkey server.key -days 3650
X.509证书包含三个文件:key,csr,crt。
key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。
默认情况下,由 OpenSSL 生成的证书只有一个通用名称,并且仅对一个主机名有效。因此,即使您有相关网站,您也不得不为每个网站使用单独的证书。在这种情况下,使用单个多域证书更有意义。此外,即使您运行的是单个网站,您也需要确保证书对于最终用户访问该网站可能采用的所有可能路径均有效。实际上,这意味着至少使用两个名称,一个有www前缀,一个没有(例如,www.feistyduck.com和feistyduck.com)。
有两种机制支持证书中的多个主机名。第一种是使用称为主题备用名称(SAN) 的 X.509 扩展列出所有需要的主机名。二是使用通配符。您也可以在更方便的时候结合使用这两种方法。实际上,对于大多数站点,您可以指定一个裸域名和一个通配符来覆盖所有子域(例如,feistyduck.com和*.feistyduck.com)。
警告
当证书包含备用名称时,将忽略所有常用名称。CA 生成的较新证书甚至可能不包含任何通用名称。因此,在备用名称列表中包含所有需要的主机名。
首先,将扩展信息放在一个单独的文本文件中。我要打电话给它fd.ext。在该文件中,指定扩展名 ( subjectAltName) 并列出所需的主机名,如以下示例所示:
subjectAltName = DNS:*.feistyduck.com, DNS:feistyduck.com
然后,在使用x509命令颁发证书时,使用-extfile开关引用文件:
$ openssl x509 -req -days 365 \
-in fd.csr -signkey fd.key -out fd.crt \
-extfile fd.ext
其余的过程与之前没有什么不同。但是当您随后检查生成的证书时(请参阅下一节),您会发现它包含 SAN 扩展:
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:*.feistyduck.com, DNS:feistyduck.com
cp -a caCert.crt /etc/pki/ca-trust/source/anchors/
cp -a server.crt /etc/pki/ca-trust/source/anchors/
/bin/update-ca-trust