自建CA与签发证书

CA

简介

在加密中,证书颁发机构或证书颁发机构(CA)是颁发数字证书的实体。数字证书通过证书的指定主题来证明公钥的所有权。这允许其他人(依赖方)依赖签名或关于与经认证的公钥对应的私钥的断言。CA充当受信任的第三方 -由证书的主体(所有者)和依赖证书的一方信任。这些证书的格式由X.509标准指定。

证书颁发机构的一个特别常见的用途是签署HTTPS中使用的证书,这是万维网的安全浏览协议。另一个常见用途是由国家政府签发身份证,用于电子签名文件。

X.509证书组成

  • 证书
    • 版本号
    • 序列号
    • 签名算法
    • 颁发者
    • 证书有效期
    • 此日期前无效
    • 此日期后无效
    • 主题
    • 主题公钥信息
    • 公钥算法
    • 主题公钥
      • 颁发者唯一身份信息(可选项)
    • 主题唯一身份信息(可选项)
    • 扩展信息(可选项)
    • 证书签名算法
    • 数字签名

自建CA

实验环境
IP 192.168.253.128
系统 Centos7

openssl的配置文件为/etc/pki/tls/openssl.cnf

下面为截取的部分,对自建CA比较关键的一些信息部分


[ CA_default ]

dir     = /etc/pki/CA       #  CA存放的目录
certs       = $dir/certs       # 保存签入数字证书的目录
crl_dir     = $dir/crl     # 证书吊销列表存放的目录
database    = $dir/index.txt   # 数据库索引文件
new_certs_dir   = $dir/newcerts        # 用于存放新证书存放的位置 certs.
certificate = $dir/cacert.pem  # 自签证书
serial      = $dir/serial      # 序列号文件
crlnumber   = $dir/crlnumber   # 当前crl(证书吊销列表)序列号
private_key = $dir/private/cakey.pem# CA自己的私钥


[ req ]
default_bits        = 2048  #生成证书请求用到的私钥的密钥长度
default_md      = sha256    #证书请求签名时的单项加密算法
default_keyfile     = privkey.pem #默认新创建的私钥存放位置
distinguished_name  = req_distinguished_name #可识别字段

第一部分,自建CA

在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可;具体如下

a.生成私钥,大小为4096bit,因为私钥是一个很重要的文件,所以权限一定要严格,这里用括号是创建子进程,设置umask,不影响当前进程的umask。这里的私钥文件/etc/pki/CA/private/cakey.pem在配置文件定义了,不能随便更改

(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

b.生成自签证书

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

  • -new:生成新证书签署请求;
  • -x509:生成自签格式证书,专用于创建私有CA时;
  • -key:生成请求时用到的私有文件路径;
  • -out:生成的请求文件的路径;如果自签操作将直接生成签署过的证书;
  • -days:证书的有效时长,单位是day;
    自建CA与签发证书_第1张图片
    c.为CA提供所需的目录及文件(先查看是否存在,如果存在则不需要创建)

mkdir -pv /etc/pki/CA/{certs,crl,newcerts}

touch /etc/pki/CA/{serial,index.txt}

echo 01 > /etc/pki/CA/serial

创建后的目录结构

[root@localhost ~]# tree /etc/pki/CA
/etc/pki/CA
├── cacert.pem
├── certs
├── crl
├── index.txt
├── newcerts
├── private
│   └── cakey.pem
└── serial

第二部分,签发证书

安装nginx服务这里不是重点,简单安装一下
上传之前下载好的nginx的tar包

cd /usr/local/src/
useradd -M -s /sbin/nologin  nginx
yum install pcre pcre-devel openssl openssl-devel gcc gcc-devel -y
tar -zxf nginx-1.14.0.tar.gz
cd nginx-1.14.0
./configure  --prefix=/usr/local/nginx  --with-http_stub_status_module  --with-http_ssl_module --user=nginx --group=nginx
make  
make install
PATH="/usr/local/nginx/sbin:$PATH"
echo 'PATH="/usr/local/nginx/sbin:$PATH"' > /etc/profile.d/nginx.sh

a.用到证书的主机(这里的主机与CA为相同的服务器)生成私钥;

mkdir /usr/local/nginx/ssl

cd /usr/local/nginx/ssl

(umask 077; openssl genrsa -out /usr/local/nginx/ssl/nginx.key 2048)

b.生成证书签署请求

openssl req -new -key /usr/local/nginx/ssl/nginx.key -out /usr/local/nginx/ssl/nginx_ssl.csr -days 365

自建CA与签发证书_第2张图片

c.将请求通过可靠方式发送给CA主机(scp或者u盘等都可以)因为我这里都在同一台主机,所以没有这个步骤

d.在CA主机上签署证书;/usr/local/nginx/ssl/nginx_ssl.csr 这个文件是刚才我们生成的证书签署请求,/usr/local/nginx/ssl/nginx_ssl.crt这个文件是我们需要的证书

openssl ca -in /usr/local/nginx/ssl/nginx_ssl.csr -out /usr/local/nginx/ssl/nginx_ssl.crt

自建CA与签发证书_第3张图片

e.查看证书中的信息,验证一下

openssl x509 -in /usr/local/nginx/ssl/nginx_ssl.crt -noout -serial -subject

自建CA与签发证书_第4张图片

第三部分,使用证书

这里用nginx配置

    server {
        listen       443 ssl;   ##监听443端口
        server_name  www.hal.com; ##与证书匹配的域名
        ssl on;                  ##允许ssl连接
        ssl_certificate /usr/local/nginx/ssl/nginx_ssl.crt;#证书的路径
        ssl_certificate_key /usr/local/nginx/ssl/nginx.key;#web服务器私钥路径

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

测试一下配置文件有没有问题

[root@localhost ssl]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

关闭防火墙和selinux然后启动nginx

systemctl  stop firewalld
setenforce  0
nginx

因为这个域名没有买,所以需要在本地做一个解析
修改这个目录C:\Windows\System32\drivers\etc下的hosts文件添加一条记录
自建CA与签发证书_第5张图片

然后用浏览器访问,因为是私人的CA所以浏览器提示不安全很正常,这里可以在设置那里将CA的自签证书导入就可以了,这里不导了

自建CA与签发证书_第6张图片

第四部分,吊销证书(很少用)

a.客户端获取要吊销的证书的serial(在使用证书的主机执行):

openssl x509 -in /usr/local/nginx/ssl/nginx_ssl.crt -noout -serial -subject

自建CA与签发证书_第7张图片

b. CA主机吊销证书

先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;

c.吊销

格式:openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

其中的SERIAL要换成证书真正的序列号;在吊销证书的第一步得到的那个serial编码是01 所以需要变成下面这条命令

openssl  ca  -revoke  /etc/pki/CA/newcerts/01.pem

d.生成吊销证书的吊销编号(第一次吊销证书时执行)

echo 01 > /etc/pki/CA/crlnumber

e.更新证书吊销列表

openssl ca -gencrl -out /etc/pki/CA/newcerts/01.pem

你可能感兴趣的:(openssl)