第04课:使用

第04课:使用 XCA 管理和生成 SSL 证书

工欲善其事必先利其器,一般情况下,大家能想到管理和生成 SSL 证书的方法就是 OpenSSL 程序或者用 JDK 自带的 keytool 命令,这两种工具虽然功能强大,但是用户的可操作性并不好,需要用户记住并输入一些命令,而且也不是特别的直观。那么有没有一个好的证书管理工具,能帮我们方便的管理证书、方便的生成证书请求、方便的对证书进行自签名、方便的把证书以一种格式导入进来,然后以自己想要的另外一种格式导出去呢?答案就是,XCA(X Certificate and key management),XCA 是一个开源的工具,底层还是基于 OpenSSL 的类库和 API 的。打开后,其界面如下:

enter image description here

那么下面就带领大家一起安装并使用 XCA 这个神奇的工具吧。

下载安装 XCA

假设我们使用的是 Windows 操作系统,下面是具体的安装步骤,如果你已经安装好,请忽略。

enter image description here

其会跳转到下面的页面,截止到 2018 年 03 月 05 日,当前的最新版本是 1.4.1:

enter image description here

下载完成之后,双击打开setup_xca-1.4.1.exe文件,选择语言:English(英语),单击 “I Agree”(我同意)按钮,后面全部使用默认安装并单击“下一步”按钮。

enter image description here

勾上“Run CA”,并单击 Finish(完成)按钮:

enter image description here

其会自动打开下面 XCA 首界面。

enter image description here

初始化 XCA

单击 File | New Database 命令,新建一个 XCA 的数据库:

enter image description here

选择需要存储的 XCA 数据库的名字和目录,比如存储的目录为 c:\xca,名字为 ssldemo:

enter image description here

输入保护的 XCA 数据库文件的密码,比如密码就是“password”:

enter image description here

在 XCA 目录下,将会看见一个名字为 ssldemo.xdb 的加密文件:

enter image description here

XCA 例子实战

到此为止,恭喜你,我们已经完成了 XCA 软件的下载、安装和初始化,下一步是我们利用 XCA 进行亮剑实战的时候了,下面所有的配置都基于下面的一个模拟的场景和企业组织信息。

假设我们是一个名字为 51TalkDocter 的公司,我们企业内部有很多自己的 Web 应用和第三方服务器,比如 MQTT 服务器、LDAP 服务器、AMQP 服务器、JMS 服务器、IIS 服务器、基于 Ngnix 的反向代理服务器等,我们现在就用 XCA 来给这些服务器生成一个企业内部的根证书,之后所有的服务器的 SSL 证书的请求都由我们企业自己内部的这个根证书进行颁发。

该企业组织的总部位于中国,陕西省,西安市,这个证书是专门由 IT 部门管理并使用的的,根证书的联系人的邮箱地址是 chancein007@163.com,基于上面的假设的组织信息,我们现在来进行 XCA 的实战。

利用 XCA 生成证书一个根证书

首先生成一个根证书的私钥(Private Key),选择 Private keys 页面,点击右边的“New Key”按钮,在弹出的对话框中输入私钥的信息,比如 Root-CA-Key,key 的类型选择 RSA(其还支持 DSA 和 EC 其他的两种私钥类型),KeySize 选择 2048 位:

enter image description here

单击“Create”按钮,则生成了如下的 Root CA 的私钥:

enter image description here

点击上面中间的“Certificate”页面,然后点击右边的 “New Certificate” 页面:

enter image description here

其会弹出下面的对话框,确保在弹出的 Source 页面下,“Template for new Certificate”,选择了 [Default CA] 选项。

enter image description here

在弹出的对话框中,选择“Extensions”页面,其 Type 的值一定要选择成“Certification Authority”,否则其就只是一个普通的自签名的证书,而不是一个能够签署别的证书的 CA(“Certification Authority”)。

enter image description here

继续单击“Subject”页面,并输入下面的相关信息,需要注意的是“Common Name”是必填项,对于“Private Key”选项,请选择上面步骤生成的名字为 Root-CA-Key 的私钥。在上面的假设中,我们提到了这个企业组织的总部位于中国,陕西省,西安市,该证书是专门由 IT 部门管理并使用的,根证书的联系人的邮箱地址是 chancein007@163.com,基于上面的假设的组织信息,所以在填入根证书的信息的时候,就安装上面的信息进行填写:

  • 通用名称(Common Name):51TalkDocter Root CA
  • 国家(Country):cn
  • 省份(StateOrProvinceName):Shannxi
  • 城市(LocalityName):xian
  • 企业或者组织名称(Organization):51talkdocter
  • 企业或者组织部门(Organization Unit):IT
  • 邮箱地址(emailAddress ):chancein007@163.com

enter image description here

最后单击“OK”按钮,将生成一个 Root CA,注意下面的图片中有一个列名为“CA”的列,如果其值为“Yes”,且前面有一个绿色的对勾,则说明 CA 生成成功,否则请检查相应的配置。

enter image description here

恭喜你,到此,我们的 51TalkDocter 的企业内部的 SSL 的根 CA 证书就顺利生成了。是不是感觉所见即所得,非常的直观,还可以双击根证书,查看根证书的相关信息如下:

enter image description here

利用 XCA 生成一个证书请求

上面我们已经为 51TalkDocter 公司创建了一个根的 CA 证书,假设现在 51TalkDocter 内部的 Web 办公系统要上线,其 Web 服务器名称为:oa.51talkdocter.com,IT 部门需要为这台服务器创建一个 SSL 的证书请求,然后把其发送给 51TalkDocter 内部的 CA 证书进行签名,那么其证书请求如何通过 xca 进行创建呢?下面请看具体的创建步骤。

如果要为 oa.51talkdocter.com 的服务器 SSL 生成一个证书请求,那么首先生成一个私钥(Private Key),步骤如下。

选择 Private keys 页面,点击右边的“New Key”按钮,在弹出的对话框中输入私钥的信息,比如 OA-Key,key 的类型选择 RSA(其还支持 DSA 和 EC 其他的两种私钥类型),KeySize 选择 2048 位:

enter image description here

点击创建后,其会生成一个名字为 OA-key 的私钥:

enter image description here

单击“Certificate Signing Requests” 页面,然后单击右边的“New Request”按钮。

enter image description here

其他配置保持默认,然后在弹出的对话窗体中单击“Subject”页面,输入 oa.51talkdocter.com 证书请求的相关信息,如下:

  • 通用名称(Common Name):oa.51talkdocter.com
  • 国家(Country):cn
  • 省份(StateOrProvinceName):Shannxi
  • 城市(LocalityName):xian
  • 企业或者组织名称(Organization):51TalkDocter
  • 企业或者组织部门(Organization Unit): IT
  • 邮箱地址(emailAddress ):chancein007@163.com

enter image description here

注意:在上面窗体的底部,有一个“Private Key”的选型,请选择上面为 oa.51talkdocter.com 的 Web 服务器已经生成好的私钥 OA-Key。

单击“OK”按钮之后,证书请求就被成功生成。

enter image description here

利用根证书签名证书请求

上面我们已经看到 oa.51talkdocter.com 的 Web 服务器的SSL证书请求已经成功生成。下面用上面创建的根证书来签名 oa.51talkdocter.com 的 Web 服务器的证书请求。在 XCA 中签名证书请求很简单,见证奇迹的时刻到了。

打开“Certificate Signing Requests”页面,选中需要准备被 CA 签名的 SSL 的证书请求,在本例子中就是 oa.51talkdocter.com 的 SSL 的证书请求,从下面的图来看,目前还是“Unhandled”的状态,说明其还只是一个证书的请求,其还未被 CA 签名:

enter image description here

选择需要被签名的证书,并点击右键,在弹出的菜单中单击“Sign”选项。

enter image description here

其会弹出一个新的窗体,在弹出的窗体中,确保“Use this Certificate for Signing”选择的值,选择了在上面的创建的根 CA(51TalkDocter Root CA),“Template for new certificate”选择了“[default] HTTPS_server”:

enter image description here

最后点击上图中的“OK”按钮,恭喜你 oa.51talkdocter 的证书请求被根 CA(51TalkDocter Root CA)签名成功。

enter image description here

再回到“Certificate”页面,我们将看到刚刚被签名的证书请求已经被签名了,并形成了一个证书链(Certificate Chain):

enter image description here

是不是感觉非常的有成就感,原来用 CA 去签名一个证书请求就这么简单!!!亲爱的读者,你现在就可以用上面的方法通过可视化工具 XCA 来为你的企业搭建 CA 认证中心了,是不是感觉瞬间高大上了?嘿嘿。

导出被签名的证书

既然我的证书已经生成了,那么如何把我生成的证书导出来呢?比如把生成的根 CA 证书 (51TalkDocter Root CA)的公钥导出来,与此同时也把被 CA 签过名的 oa.51talkdocter.com 的公钥和私钥也导出来呢?

选择“oa.51talkdocter.com”的子证书,单击右边的“Export”按钮:

enter image description here

在弹出的新的窗体中,“Export Format”选择“PCKS #12 (*.p12)”,之所以选择 p12 格式的证书导出格式是因为 p12 格式可以同时存储私钥和公钥。此外还需要选择导出 p12 文件后,其存储的目录位置和文件名称,比如 C:\xca\oa.51talkdocter.com.p12,最后单击“OK”按钮。

enter image description here

单击“OK”按钮按钮后,其会弹出一个让用户输入密码的窗体,为什么会弹出这个窗体呢?因为我们知道,p12 会导出私钥,而私钥是一个非常重要的证书,只能让拥有证书的人知道,其他人不能让知道,所以导出的 p12 需要有一个密码来保护私钥的安全。

enter image description here

打开 C:\xca\oa.51talkdocter.com.p12,p12 证书被成功生成。

enter image description here

上面只是导出 p12 的例子,实际上,XCA 还可以把证书导出为下面的其他格式。

  • PEM PCKS #7
  • PCKS #12 Chain
  • DER
  • PEM Chain
  • PCKS #7 Chain
  • PCKS #12
  • PEM+Key
  • PEM + PKCS #8
  • PCKS #7 Trust
  • PCKS #7 All
  • PEM Trust
  • PEM ALL
  • Certificate Index file

具体其有什么区别,敬请期待笔者专门开一个章节进行说明。

总结

本篇文章给大家分享了在什么地方能够下载到 XCA 这个开源免费的软件,并分享了如何安装并初始化 XCA。

万事俱备只欠开始实战,XCA 环境初始化好之后,通过4个实际的需求例子,深入浅出的演示了如何使用 XCA 进行下面的操作:

  • 生成证书一个根证书
  • 生成一个服务器端的证书请求
  • 如何用生成的 CA 去签名证书请求
  • 导出被签名好的服务器证书

读书百遍,不如一练,请大家一定要按照我们上面的步骤先跟着我的步骤一步一步的练习,在此基础之后,再尝试练练其他地方,笔者保证你肯定还会有意想不到的其他收获,XCA 的功能远远不止这些,最后祝大家学习顺利!

上一篇
下一篇
目录