author:JevonWei

版权声明:原创作品


CA证书的相关文件路径

  • openssl配置文件/etc/pki/tls/openssl.cnf

  • /etc/pki/tls/openssl.cnf

      CA相关文件都在/etc/pki/CA/目录下
    /etc/pki/CA/cert 存放发布证书
    /etc/pki/CA/crl 证书吊销列表
    /etc/pki/CA/index.txt 证书编号等索引数据库文件
    /etc/pki/CA/newcerts 新颁发证书存放目录
    /etc/pki/CA/cacert.pem CA服务端的自签名证书
    /etc/pki/CA/serial 下一个将要颁发证书的序列号
    /etc/pki/CA/crlnumber 吊销证书的编号
    /etc/pki/CA/crl.pem 吊销证书存放的文件
    /etc/pki/CA/private/cakey.pem 证书的私钥文件 policy = policy_match/policy_anything
    [ policy_match ] (match意为必须匹配,optional为可选,也可不匹配)
    countryName = match \\国家地点
    stateOrProvinceName = match \\省/州地区
    organizationName = match \\ 公司部门
    organizationalUnitName = optional
    commonName = supplied
    emailAddress = optional [ policy_anything ] (不强制信息对应匹配)
    countryName = optional
    stateOrProvinceName = optional
    localityName = optional
    organizationName = optional
    organizationalUnitName = optional
    commonName = supplied
    emailAddress = optional

创建CA证书及客户端申请证书

主机A为CA服务端,主机B为客户端申请CA

主机A

  • 创建所需要的文件

      [root@danran app]# touch /etc/pki/CA/index.txt   生成证书的索引数据库文件
    [root@danran app]# echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号,序列号必须为两位,且序列号是十六进制存储
  • CA自签证书

      生成私钥文件
    (umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) 小括号开启子进程,umask修改umask值从而修改私钥文件的权限,2018为加密位数,genrsa为rsa加密算法 生成自签名证书
    openssl req -new -x509 –keys /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
    req 请求
    -new:生成新证书签署请求
    -x509:专用于CA生成自签证书
    -key:生成请求时用到的私钥文件
    -days n:证书的有效期限
    -out 输出CA自签名文件

    如下图,依次输入申请CA证书的国家、省份地区、所在城市、公司、部门、服务主机名及Email地址,根据/etc/pki/tls/openssl.cnf配置文件的中的policy = policy_match/policy_anything策略的不同, 有些选项必须要写且匹配,则有些选项可省略不写或信息不需匹配,再此/etc/pki/tls/openssl.cnf配置文件的中的policy策略为:policy = policy_match,则要求国家、省份、公司信息必须填写且信息一致

      查看自签名证书的信息
    openssl x509 -in /etc/pki/CA/cacert.pem -noout -text

主机B

  • 生成私钥文件

      (umask 066;openssl genrsa -out /app/service.key 2048)  小括号开启子进程,umask修改umask值从而修改私钥文件的权限,2018为加密位数,genrsa为rsa加密算法,私钥文件存放路径不唯一,再此试验中将私钥文件存放于/app目录下命名为service.key
  • 使用私钥文件创建证书申请文件

      req -new -key /app/service.key -out /app/service.csr 根据/app/service.key私钥文件生成证书申请文件并存放在/app/service.csr

如下图,依次输入所在国家、省份州、城市等地区及公司、部门、需要申请证书的web服务域名、Email地址、加密口令和公司可选项,根据/etc/pki/tls/openssl.cnf配置文件的中的policy = policy_match/策略,国家,省份、公司信息必须与CA服务端填写的信息一致

  • 将证书申请文件/app/service.csr传送给CA服务端

      scp /app/service.csr 192.168.198.134:/etc/pki/CA/csr 复制/app/service.csr证书申请文件到/etc/pki/CA/csr目录下,/etc/pki/CA/csr路径不是唯一的,可自定义

主机A

  • CA签署证书,将证书颁发给请求者

      openssl ca -in /etc/pki/CA/csr/service.csr -out /etc/pki/CA/certs/service.crt -days 10   根据/etc/pki/CA/csr/service.csr证书的申请文件从而颁发证书并将证书存放在/etc/pki/CA/certs/service.crt中,指定证书的有效期为10天

  • 查看/etc/pki/CA下的文件

      tree /etc/pki/CA/
    ll /etc/pki/CA/certs/service.crt /etc/pki/CA/newcerts/01.pem 证书的路径/etc/pki/CA/certs/service.crt和/etc/pki/CA/newcerts/01.pem是完全相同的

  • 查看证书数据库中的信息

      cat /etc/pki/CA/index.txt

  • 查看证书信息

      openssl -x509 -in /etc/pki/CA/certs/service.crt -noout -text

主机B再次为新的web服务申请证书

主机B

  • 生成新的证书申请文件

    申请过证书的主机,若需要再次为某个新的web服务申请证书,则不需要再次生成新的秘钥,使用之前申请证书的秘钥再次申请新的证书即可,秘钥的路径为/app/service.key

      openssl req -new -key /app/service.key -out /app/service2.csr

根据/etc/pki/tls/openssl.cnf配置文件的中的policy = policy_match配置文件的此策略可知,Country Name、State or Province Name、Organization Name此三项输入信息必须跟CA服务端的信息对应匹配,若有一项信息输入不匹配,则CA颁发证书时将提示错误信息不予颁发,键入信息如下图

![image](https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1500861676&di=22779c84d999663b2312ad434a50f297&imgtype=jpg&src=http%3A%2F%2Fh.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F54fbb2fb43166d221884f70e4c2309f79152d2bd.jpg)
  • 将证书申请文件/app/service2.csr传送到CA服务端

      scp /app/service2.csr 192.168.198.134:/etc/pki/CA/csr

主机A

  • 根据主机B的证书申请文件为此颁发CA证书

       openssl ca -in /etc/pki/CA/csr/service2.csr -out /etc/pki/CA/certs/service2.crt -days 30  \\证书有效期为30天

由于证书申请文件的Country Name、State or Province Name输入信息与CA服务端的信息不对应匹配,故证书颁发失败,如下图

![image](https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1500862106&di=1a7dad61fff4066152fa3b2e7ac85f1b&imgtype=jpg&src=http%3A%2F%2Fg.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F8435e5dde71190efd0577d45c41b9d16fcfa60f8.jpg)
  • 若想证书继续颁发,有以下三种解决方法
  1. 证书申请者主机B重新生成证书申请文件,然后转送给CA服务端

     openssl req -new -key /app/service.key -out /app/service2.csr

  2. CA服务端将/etc/pki/tls/openssl.cnf配置文件的中的policy = policy_match策略中的countryName、stateOrProvinceName选项修改为optional

     [ policy_match ]
    countryName = match
    stateOrProvinceName = match
    organizationName = match
    organizationalUnitName = optional
    commonName = supplied
    emailAddress = optional 修改为
    [ policy_match ]
    countryName = optional
    stateOrProvinceName = optional
    organizationName = match
    organizationalUnitName = optional
    commonName = supplied
    emailAddress = optional
  3. CA服务端将/etc/pki/tls/openssl.cnf配置的文件的policy = policy_match修改为policy = policy_anything,policy_anything即为任何选项都不需要 必须匹配,如下图



    修改为

  • CA服务端根据证书申请文件重新为申请者颁发证书

      openssl ca -in /etc/pki/CA/csr/service2.csr -out /etc/pki/CA/certs/service2.crt -days 30

  • 查看颁发证书的信息

      openssl x509 -in /etc/pki/CA/newcerts/01.pem -noout -text   \\-text以文本的方式查看

      查看证书数据库的数据信息
    [root@danran CA]# cat /etc/pki/CA/index.txt
    V 170726140620Z 01 unknown /C=CN/ST=henan/O=mage/OU=24/CN=www.danran.com
    V 170816022756Z 02 unknown /C=US/ST=NewYork/L=ny/O=danran.com/OU=24/CN=www.Jevon.com 颁发新的证书时,同时为旧的证书做备份
    [root@danran CA]# cat /etc/pki/CA/index.txt.old
    V 170726140620Z 01 unknown /C=CN/ST=henan/O=mage/OU=24/CN=www.danran.com 设定subject(服务主机域名)是否唯一,默认subject必须唯一
    [root@danran CA]# cat /etc/pki/CA/index.txt.attr
    unique_subject = yes 证书的索引编号信息
    [root@danran CA]# cat /etc/pki/CA/serial
    03
    [root@danran CA]# cat /etc/pki/CA/serial.old
    02
  • openssl x509 -in /etc/pki/CA/cacert.pem -noout -text|issuer|subject|serial|dates 查看证书中的信息,如发布者、标题、序列号、时间等

主机B重新生成一个主机域名为www.danran.com的证书申请文件

  • 主机B生成证书申请文件,并传送给CA服务端

      openssl req -new -key /app/service.key -out /app/service3.csr
    scp /app/service3.csr 192.168.198.134:/etc/pki/CA/csr

  • CA服务端为第二个subject为www.danran.com的服务域名颁发证书,则颁发失败

      openssl ca -in /etc/pki/CA/csr/service3.csr -out /etc/pki/CA/certs/service4.crt -days 30

  • 证书颁发失败的原因

      unique_subject = yes \\意为完全相同的证书申请文件不能申请两个证书

      修改/etc/pki/CA/index.txt.attr文件中的unique_subject = no 即可不检查唯一性,实现由一份申请文件申请两个证书
    [root@danran CA]# cat /etc/pki/CA/index.txt.attr
    unique_subject = no

  • CA为主机B重新生成一个www.danran.comde证书

      openssl req -new -key /app/service3.key -out /app/service4.csr
    scp /app/service3.csr 192.168.198.134:/etc/pki/CA/csr

      ll /etc/pki/CA/certs/service2.crt /etc/pki/CA/certs/service4.crt    \\比较两个证书文件即相同

吊销证书

    CA服务端取消06.pem证书
openssl ca -revoke /etc/pki/CA/newcerts/06.pem
查看证书数据库中的06.pem证书状态
cat /etc/pki/CA/index.txt
指定第一个要吊销证书的编号
第一次更新证书吊销列表前才需要执行,/etc/pki/CA/crlnumber第一次需要新建
echo 01 > /etc/pki/CA/crlnumber
更新证书吊销列表(吊销证书路径/etc/pki/CA/crl.pem)
ca -gencrl -out /etc/pki/CA/crl.pem
查看吊销证书的信息
openssl crl -in /etc/pki/CA/crl.pem -noout -text
![image](https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1500868656&di=701210f9d706e3e7dc1ec833094b8d46&imgtype=jpg&src=http%3A%2F%2Ff.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F83025aafa40f4bfb16f850ce094f78f0f7361804.jpg)
![image](https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1500870783&di=22ce813068429b083ea4c8dcc3ec3219&imgtype=jpg&src=http%3A%2F%2Fe.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F8435e5dde71190ef0aada344c41b9d16fcfa60d2.jpg)

openss命令

http://www.cnblogs.com/JevonWei/p/7193781.html

实现CA证书创建及客户端申请证书的更多相关文章

  1. Makecert.exe(证书创建工具)

    Makecert.exe(证书创建工具) .NET Framework 4.5   其他版本   2(共 3)对本文的评价是有帮助 - 评价此主题   证书创建工具生成仅用于测试目的的 X.509 证 ...

  2. C#程序证书创建工具 (Makecert.exe)

    原文地址:https://msdn.microsoft.com/zh-cn/library/bfsktky3(VS.80).aspx 证书创建工具生成仅用于测试目的的 X.509 证书.它创建用于数字 ...

  3. Centos7创建CA和申请证书

    转载:http://rackie386.blog.51cto.com/11279229/1947999 Centos7.3创建CA和申请证书 openssl 的配置文件:/etc/pki/tls/op ...

  4. Centos7创建CA和申请证书 转自https://www.cnblogs.com/mingzhang/p/8949541.html

    Centos7.3创建CA和申请证书 openssl 的配置文件:/etc/pki/tls/openssl.cnf 重要参数配置路径 dir   = /etc/pki/CA               ...

  5. 使用 OpenSSL 为 Nginx 创建自签名证书 并开启客户端身份验证

    本文章默认读者了解Openssl,CA,网站证书相关知识,直接实战!配置完成后,浏览器会显示"安全的HTTPS"连接.不会像其他文章那样,是红色警告的证书提示. 准备环境 笔者使用 ...

  6. 自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名【转】

    自签名的证书无法被吊销,CA签名的证书可以被吊销 能不能吊销证书的区别在于,如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户进行通信   如果你的规划需要创建多个证书,那么使用私有 ...

  7. 利用CA私钥和证书创建中间CA

    本文借助实验环境下创建的root CA私钥和证书进一步创建中间CA.为了便于区分,我们将创建中间CA(intermediate CA)的CA称为根CA(root CA). 关于如何使用OpenSSL创 ...

  8. 加密解密(3)Bob到CA申请证书过程

    网络安全中最知名的人物大概就是Bob和Alice了,因为很多安全原理阐述中都用这两个虚拟人物来进行实例说明. 我们来看看Bob是怎么从CA中心获得一个数字证书的: 1.Bob首先创建他自己的密钥对(k ...

  9. 使用非Web方式从CA申请证书

    背景介绍:关于从CA申请证书这点事,网上的那些教程基本都是让我们通过访问https://server/certsrv这样的网页来操作的,我一直希望不依赖IIS就把这事干了,于是就有了下面的文章. 1. ...

随机推荐

  1. phpMyAdmin安装部署

    phpMyAdmin 是一个用PHP编写的软件工具,可以通过web方式控制和操作MySQL数据库.通过phpMyAdmin 可以完全对数据库进行操作,例如建立.复制和删除数据等等.如果使用合适的工具, ...

  2. <EffectiveJava>读书笔记--01继承的使用注意

    1, 父类的构造器方法中不能调用能够被子类重写的方法. 分析: 当初始化一个子类时, 首先要初始化父类, 即调用父类的构造方法; 如果父类的构造方法中调用了可被重写的其它方法, 那么此时调用的其实是该 ...

  3. MapReduce笔记——技术点汇总

    目录 · 概况 · 原理 · MapReduce编程模型 · MapReduce过程 · 容错机制 · API · 概况 · WordCount示例 · Writable接口 · Mapper类 ·  ...

  4. Python学习——(1)Centos安装Flask

    一.环境 [root@localhost myproject]# cat /proc/version centos6.5 Linux version 2.6.32-642.11.1.el6.i686 ...

  5. 设置双击直接打开.ipynb文件

    本文环境:win10(64)+anaconda3(64) anaconda3安装好后,可在开始菜单下查看 背景:jupyter notebook打开后无法更改路径,只能在默认路径下upload文件(如 ...

  6. web 前端路线

  7. HtmlCleaner CleanerProperties 参数配置(转自macken博客,链接:http://macken.iteye.com/blog/1579809)

    HtmlCleaner CleanerProperties 参数配置 Parameter Default Explanation advancedXmlEscape true If this para ...

  8. jQuery.Gantt

    使用jQuery.Gantt过程中,遇到的问题!

  9. 多人开发的git项目如何保持提交日志为一条直线?

    多人开发的git项目如何保持提交日志为一条直线? 一.Git的项目的git常用操作 a)Git clone 项目地址 从远程仓库克隆项目到本地 b)Git pull 从当前分支拉取更新代码 c)Git ...

  10. Python 函数装饰器和闭包

    装饰器基础知识 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数). 装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象. p.p1 { margin: 0.0px ...