创建CA服务与签发证书吊销证书操作:

1、自建CA服务,为CA服务创建自签证书;将证书发放到需要的客户端,也就是导入浏览器

2、web服务端创建证书认证请求

3、CA服务端签署web服务端发来的签署请求,签署完后将证书发给web端并在web端使用该证书

创建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.cnf

(1) 创建所需要的文件
	# touch /etc/pki/CA/index.txt # 证书索引数据库文件 
	# echo 01 > /etc/pki/CA/serial # 证书序号
	# 
(2) CA自签证书
	# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
	# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
		-new: 生成新证书签署请求;
		-x509: 专用于CA生成自签证书;
		-key: 生成请求时用到的私钥文件;
		-days n:证书的有效期限;
		-out /PATH/TO/SOMECERTFILE: 证书的保存路径;

(3) 发证
	(a) 用到证书的主机生成证书请求;
		# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
		# openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr
	(b) 把请求文件传输给CA;
	(c) CA签署证书,并将证书发还给请求者;
		# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
		查看证书中的信息:
		openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|-subject|-serial

(4) 吊销证书
	(a) 客户端获取要吊销的证书的serial
		# openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
	(b) CA
		先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致;
	吊销证书:
		# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
	(c) 生成吊销证书的编号(第一次吊销一个证书)
		# echo 01 > /etc/pki/CA/crlnumber
	(d) 更新证书吊销列表
		# openssl ca -gencrl -out thisca.crl
	查看crl文件:
		# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text

配置文件中的一些字段:

[ policy_match ]
countryName             = match # 必须,国家名
stateOrProvinceName     = match # 必须,省名
organizationName        = match # 必须,公司名称
organizationalUnitName  = optional # 可选,部门名
commonName              = supplied # 主机名或域名
emailAddress            = optional # 可选,邮箱


创建CA并给服务颁发证书:使用自定义配置文件

1、创建私有CA:

使用到的配置文件:

cat > master_ssl.cnf <<EOF
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
DNS.5 = localhost
DNS.6 = *.k8s.local
IP.1 = 127.0.0.1
IP.2 = 10.96.0.1
EOF

可以使用通用域名或IP:支持泛域名,但不支持CIDR无类路由。

[ alt_names ]
DNS.1               = example.com
DNS.2               = *.example.com
IP.1                = 192.168.0.1


创建CA私钥:

openssl genrsa -out ca.key 2048

创建自签CA证书:

openssl req -x509 -new -nodes -key ca.key -subj "/CN=k8s-master" -days 5000 -out ca.crt


2、用私有CA给服务颁发证书:

服务证书私钥:

openssl genrsa -out server.key 2048

服务证书签署请求:

openssl req -new -key server.key -subj "/CN=k8s-master" -config master_ssl.cnf -out server.csr

CA签署服务证书:

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 5000 -extensions v3_req -extfile master_ssl.cnf -out server.crt



默认配置文件签署证书:

openssl genrsa -out etcd_server.key 2048
openssl req -new -key etcd_server.key -subj "/CN=etcd" -out etcd_server.csr
openssl x509 -req -in etcd_server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out etcd_server.crt -days 5000


固定格式:

openssl genrsa -out server.key 2048

openssl req -new -key server.key -subj "/CN=etcd" -out server.csr (新请求,new request)

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000 (签署请求,x509自签 request)



快速生成证书:(不需要创建CA直接生成证书和私钥)

方法一:

openssl req -nodes -new -x509 -keyout server.key -out server.crt -days 365 -subj '/CN=ik8s.io/O=Qiyang LTD./C=CN'

openssl req -utf8 -newkey rsa:1024 -subj "/CN=www.scriptjc.com" -keyout app.key -nodes -x509 -out app.crt

方法二:仅限CentOS7,其实调用的是 /etc/pki/tls/certs/Makefile 命令。

cd /etc/pki/tls/certs # 不想在这个目录也行,把Makefile文件移动到任意目录,然后在这个目录执行make命令
make ~/httpd.crt # 跟着提示即可快速完成证书创建
# 这种方法每次都需要输入私钥密码,可以把Makefile文件中创建key的命令处去掉-aes128选项即可。


查看证书信息:

openssl x509 -in server.crt -noout -text


快速生成证书脚本:

#!/bin/bash

CA_SUBJECT="/O=scriptjc/CN=ca.scriptjc.com"
SUBJECT="/C=CN/ST=shanghai/L=shanghai/O=scriptjc/CN=www.scriptjc.com"
SERIAL=34
EXPIRE=202002
FILE=scriptjc.com

openssl req  -x509 -newkey rsa:2048 -subj $CA_SUBJECT -keyout ca.key -nodes -days 202002 -out ca.crt

openssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key  -subj $SUBJECT -out ${FILE}.csr

openssl x509 -req -in ${FILE}.csr  -CA ca.crt -CAkey ca.key -set_serial $SERIAL  -days $EXPIRE -out ${FILE}.crt

chmod 600 ${FILE}.key ca.key