Openssl搭建私有CA认证

概述


CA英文全称Certification Authority,即数字证书认机构。从广义上来说,CA是负责发放和管理数字证书的权威机构,并作为用户数字认证中受信任的第三方,承担公钥体系(PKI)中公钥的合法性检验的责任,在互联网上,实现用户与用户、用户与企业之间的数字身份认证。

本文通过使用openssl进行搭建私有CA认证体系,从而简单地了解CA的认证过程。搭建私有CA,可以实现企业内部认证加密。

环境部署


本文环境基于 CentOS 6.8

wKiom1fijmuytQIkAALGFevsae0320.png

步骤流程


wKioL1fiQSTTTQCVAAD7ba3OYjY090.png

具体操作


1. CA的配置文件

首先我们可以查看 /etc/pki/tls/openssl.cnf 的文件,找到以下内容了解CA的配置信息

#######################################################
[ ca ]
default_ca    = CA_default        # The default ca section
#######################################################
[ CA_default ]
dir        = /etc/pki/CA        # CA的工作目录
certs        = $dir/certs        # 证书存放位置
crl_dir        = $dir/crl        # 吊销列表
database    = $dir/index.txt    # 索引文件数据库,本文件自动生成
#unique_subject    = no            # Set to 'no' to allow creation of
                    # several ctificates with same subject.
new_certs_dir    = $dir/newcerts        # 默认新签署证书存放目录.
certificate    = $dir/cacert.pem     # CA自己的证书
serial        = $dir/serial         # 当前发出去的证书的序列号
crlnumber    = $dir/crlnumber    # 吊销的证书序列号
                    # must be commented out to leave a V1 CRL
crl        = $dir/crl.pem         # 当前正在使用的CRL (证书列表文件)
private_key    = $dir/private/cakey.pem# CA自己的私钥(建议限制权限600 )
RANDFILE    = $dir/private/.rand    # 随机数种子
x509_extensions    = usr_cert        # 用户扩展

2. 客户端配置

2.1. 在客户端生成密钥,建议保存至应用此证书的服务的配置文件目录下:

(演示假设证书应用于 httpd 服务,按建议,我们到 httpd 的配置文件目录下创建文件)

[root@IP160-C6-httpd ~]# >>mkdir /etc/httpd/ssl
[root@IP160-C6-httpd ~]# >>cd /etc/httpd/ssl
[root@IP160-C6-httpd ~]# >>( umask 077 ; openssl genrsa -out httpd.key 1024 )
       # 建议:子shell中更改umask,新建文件权限即为600,子shell的umask不影响全局

wKiom1fiUZmwQ-9SAAAjQjXFTMo173.png

2.2. 生成证书签署请求:

Tips: CSR是Certificate Signing
Request的英文缩写,即证书请求文件,也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请
者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。

来自<http://baike.baidu.com/link?url=TD6KI4WvcgOHWfxuocHFvD54VHQIO5aAxn4B8k3cUg2a_RMmoK4CcktqsmdhRMVLj7cv4pXnjA5p8NdgBEsoyq>

 生成

[root@IP160-C6-httpd ssl]# >>openssl req -new -key httpd.key -out httpd.csr
        #通过加载httpd.key生成一个新请求,保存为httpd.csr

 创建过程中需要进行交互式填写信息:()

1). 国家:CN 两位国家代码(可以在/etc/pki/tls/openssl.cnf设置默认值)

2). 省份:beijing

3).   市: beijing

4). 公司:Client.Co

5). 部门:RD

6). 名字:www.client.com      #非常重要,

7). 联系:test@client.com    #测试使用

8). 密码:#将申请文件加密

wKioL1fiVE3xut2pAACOv3GLqbA179.png

 

2.3. 将httpd.csr发给CA服务器

[root@IP160-C6-httpd ssl]# >>scp httpd.csr root@10.10.20.200:/root/pem
    #测试环境中使用scp传输文件到CA服务器

wKioL1fiX-6gZOAQAAAVgBlPsO0503.png

 

3. 服务器配置

3.1.  生成自己的密钥对

CA服务器的配置目录初始环境

wKioL1fiZ8WgpBhaAAAYWYcGKOU672.png

我们进入 /etc/pki/CA/ 目录生成私钥:(留意当前目录,与相对路径)

[root@IP200-C6-CA ~]# >>cd /etc/pki/CA/
[root@IP200-C6-CA CA]# >>tree -C .
[root@IP200-C6-CA CA]# >>( umask 077 ; openssl genrsa -out private/cakey.pem 2048 )

wKiom1fiaSqyvzucAAAvV5sKLKo937.png

 

 如果想查看公钥:(非必要步骤)

[root@IP200-C6-CA CA]# >>openssl rsa -in private/cakey.pem -pubout -text -noout

 

3.2. 生成自签证书

[root@IP200-C6-CA CA]# >>openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
  # -new  创建一个认证申请;
  # -x509 生成一份 X.509 证书,只有自签署时候才需要此选项,简化(申请-签署)过程;
  # -key    指明私钥文件;
  # -out    输出证书文件;
  # -days  签署证书有效期。

wKioL1fibMOBOZPvAABgRgePi1I350.png

 

3.3. 创建所需文件,指定证书编号初始值

完成 3.2. 后,此时配置目录下的状态:

wKiom1fibVjCQqQUAAAa_RZ2rso748.png

我们还需要新建部分初始文件,以保证CA服务正常运行

[root@IP200-C6-CA CA]# >>touch index.txt serial crlnumber
[root@IP200-C6-CA CA]# >>echo 01 > serial
  #设置序号从01开始

wKioL1fib8iAvHPFAAAq-V_c-1E269.png

到此,我们已经完成了搭建根CA服务器的过程。

3.4. 签署client的证书

CA服务器签署客户端证书的命令很简单:

[root@IP200-C6-CA CA]# >>openssl ca  -in ~/pem/httpd.csr -out ~/pem/httpd.crt

此时我们运行会报错:↓↓↓↓↓↓↓

[root@IP200-C6-CA CA]# >>ll ~/pem/httpd.csr 
-rw-r--r--. 1 root root 761 Sep 21 17:49 /root/pem/httpd.csr
[root@IP200-C6-CA CA]# >>openssl ca  -in ~/pem/httpd.csr -out ~/pem/httpd.crt
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
The stateOrProvinceName field needed to be the same in the
CA certificate (shanghai) and the request (beijing)

我们在查看 /etc/pki/tls/openssl.cnf 的文件,发现这一段内容:

原因是CA配置默认启用的是 policy_match ,限制客户端注册信息部分需要匹配CA服务器。

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy        = policy_match
# For the CA policy
[ policy_match ]
countryName        = match
stateOrProvinceName    = match
organizationName    = match
organizationalUnitName    = optional
commonName        = supplied
emailAddress        = optional
# For the 'anything' policy
# At this point in time, you must list all acceptable 'object'
# types.
[ policy_anything ]
countryName        = optional
stateOrProvinceName    = optional
localityName        = optional
organizationName    = optional
organizationalUnitName    = optional
commonName        = supplied
emailAddress        = optional
####################################################################

所以我们只需修改为 policy_anything:

Openssl搭建私有CA认证

再次运行签署证书命令:

签署过程需要交互回答两个问题

Sign the certificate? [y/n]:y   #签署确认
1 out of 1 certificate requests certified, commit? [y/n]y   #写入证书数据库

Openssl搭建私有CA认证

我们看到证书已经在CA服务器上完成签署,数据库也记录在案了。

Openssl搭建私有CA认证

注:CA服务器吊销证书:(证书名)

  openssl ca -revoke /PATH/TO/SOMEFILE.crt (证书名)

3.5. 回传已签署的证书给客户端

[root@IP200-C6-CA CA]# >>scp ~/pem/httpd.crt root@10.10.20.160:/etc/httpd/ssl

 Openssl搭建私有CA认证

至此,我们完成了整个CA搭建,客户端证书认证的过程。

原创文章,作者:昭其,如若转载,请注明出处:http://www.178linux.com/48411

(1)
昭其昭其
上一篇 2016-09-21
下一篇 2016-09-22

相关推荐

  • 第六次上课作业

    1、三种权限rwx对文件和目录的不同意义 对文件 r:read  可读取此文件的实际内容,如读取文本文件的文字内容等 w: write  可以编辑,新增或修改该文件的内容 x:execute  该文件具有可以被系统执行的权限==>>针对二进制文件或脚本 X:针对目录会加上x权限…

    Linux干货 2016-08-04
  • Btrfs文件系统

    一:概述     1.1简介         Btrfs被称为是下一代Linux文件系统。通常念成 Butter FS,Better FS 或B-tree FS。它采用了很多先进的文件系统设计,不仅解决了 ext2/3的扩展性问题,支持写时…

    Linux干货 2016-04-19
  • 正则表达式

    grep:Global search REgular expression and Print out the line         文本搜索工具,根据用户指定的”模式“对目标文本逐行进行匹配检查;打印匹配到的行        模式:由正则表达式字符及文本字符所编写的过滤条件…

    Linux干货 2016-08-08
  • linux 怎么使用帮助

    linux怎么使用帮助 Which命令 whatis命令 使用手册来获取帮助-man命令 通过info命令查看帮助 使用软件自带的帮助文档来获取帮助 通过在线文档获取帮助 使用网站和搜索 linux 怎么使用帮助 在linux中有很多命令,配置文件,很多命令选项和参数,我们不可能完全记住的,那工作中遇到怎么办,我们可以查看linux自带的帮助文档,或者利用搜…

    Linux干货 2016-09-05
  • LVS基本原理

    LVS基本原理 简介 负载调度器、真实服务器群节点一起被称为LVS。LVS负载调度器(有时也称为负载平衡器),接收所服务的所有接入服务集群的请求,并决定集群中的哪个节点应该回复其请求。 1)负载调度器(Director):作为整个集群的前端,主要将用户请求分发至真实服务器中进行处理。 2)真实服务器池:由多个功能相同的真实服务器组成,为用户提供真正的网络服务…

    Linux干货 2016-12-27
  • 浅谈编译kernel+busybox构建拥有远程ssh登录和web功能最小linux系统(一)

    实验环境win7+VM11.1 大致过程总揽 1,硬件准备以及查看硬件设备型号(不用担心,这些都是VM虚拟出来的) 2,编译环境的配置以及下载内核源码以及编译内核 3,编译busybox,以及提供系统正常运行的配置文件,初步运行linux系统 4,编译安装dropbear提供ssh服务 5,安装nginx;提供web服务 一,硬件准备以及查看硬件设备型号 由…

    Linux干货 2015-09-22

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-23 12:09

    写的很详细,图片讲解的也很细腻,赞一个。