自建CA服务,自签证书,SSL网站实例,OpenSSL
来源:原创
时间:2018-02-15
作者:脚本小站
分类:Linux
创建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