## 前言
网上现有的多数教程和文章都是基于openssl命令行工具来生成证书的,但是这种方式比较繁琐,而且容易出错,且不方便多人同时管理,所以本胖决定了使用简便直观的跨平台图形化工具--XCA来管理证书。
XCA支持Windows、Linux、MacOS多种平台,用的是Qt开发的,所以各平台上界面都是一致的,而且支持多语言,本胖使用的是中文版。内置了数据库的支持,可使用MySQL/MariaDB、PostgreSQL、Open Database Connectivity (ODBC)、SQLite等多种数据库,默认的单文件模式其实用的是SQLite数据库,所以不需要额外安装数据库,自己用的话也非常方便。在多人协作的情况下,可以使用大家都能够访问到的MySQL/MariaDB或PostgreSQL来实现多人共享证书库,这样就可以实现多人同时管理证书。
## XCA的安装
XCA下载地址为 `https://hohnstaedt.de/xca/index.php/download` ,根据操作系统下载对应的版本即可。
Windows版本有 `msi` 和 `zip` 两种,msi是安装包,zip是带`portable`字样的压缩包,zip包为便携绿色版、免安装。
本胖使用的是Mac,MacOS用户也可以使用Homebrew来安装,命令如下:
```bash
# 旧的
brew cask install xca
# 新的
brew install --cask xca
```
## XCA的基础使用
### 切换中文界面
菜单栏 `File` -> `Language` -> `Chinese(Chinese)`,如下图所示:
切换后软件界面就变成中文的了,如下图所示:
### 新建证书库
根据需求选择单文件模式还是远程数据库模式,单文件模式的话,证书库就是一个`Sqlite3.x` 文件,所有的证书都存储在这个文件里面,这种模式适合个人使用,而且不需要安装数据库,非常方便。远程数据库模式的话,证书库就是一个数据库,所有的证书都存储在这个数据库里面,这种模式适合多人协作,但是需要安装数据库,供所有使用者来连接使用,比较麻烦。
- 单机个人使用的话:菜单栏 `文件` -> `新建数据库` 或 `打开数据库`
- 多人协作的话:菜单栏 `文件` -> `打开远程数据库`
,如下图所示:
本胖以使用MySQL为例,点击 `打开远程数据库` ,如下图:
数据库配置如果没问题的话,会弹出一个对话框,让你设置`证书库`的密码,如下图所示:
该密码在后面的每一次打开都需要输入,所以一定要记住,否则后面就无法打开证书库了。
### 生成根证书
后续生成证书的时候,都是以根证书为基础来生成的,所以先生成根证书。
每一个证书需要对应一个私钥,所以先生成一个根证书用的私钥,然后再生成根证书。
切换到`私钥`选项卡,点击`创建密钥`,如下图所示:
在内部名称中给它起个名字,本胖这里起名为`ca-private`,密钥长度选择`2048`,密钥类型选择`RSA`,点击`确定`,如下图所示:
创建成功后会在列表中看到刚才创建的私钥,如下图所示:
切换到`证书`选项卡,点击`创建证书`,如下图所示:
在 `来源`选项卡,使用模版创建新证书,选择`CA`,如下图所示:
在 `主体`选项卡,填写证书的基本信息,内部名称为证书的名称,本胖这里填写了`MyCA`,其他信息分别为:
- countryName:国家名称,本胖这里填写了`CN`
- stateOrProvinceName:省份名称,本胖这里填写了`GX`
- localityName:城市名称,本胖这里填写了`Nanning`
- organizationName:组织名称,本胖这里填写了`WeiPang`,可以理解为`公司名称`
- organizationalUnitName:组织单位名称,本胖这里填写了`WeiPang`,可以理解为`部门名称`
- commonName:通用名称,本胖这里填写了`WeiPang`
- emailAddress:邮箱地址,本胖这里填写了`object.new@qq.com`
如下图所示:
在 `扩展`选项卡,填写证书的扩展信息,如下图所示:
类型选择`CA`,时间跨度填入你想要的证书有效期,本胖这里填写了`20`,单位为`年`,然后点`应用`按钮,左边的有效期会跟着变动。
在`密钥用法`选项卡,勾选`Critical`,我们后续的实战实例只需用到`TLS Web`和`Code Signing`,但为了试验,可以全部选中。
各种类型的密钥用法的含义如下:
1. X509v3 Key Usage(密钥用途):
- Digital Signature:数字签名
- Non Repudiation:不可否认性
- Key Encipherment:密钥加密
- Data Encipherment:数据加密
- Key Agreement:密钥协商
- Certificate Sign:证书签名
- CRL Sign:撤销列表签名
- Encipher Only:仅加密
- Decipher Only:仅解密
- 该字段指定了该证书可以用于哪些目的,例如数字签名、数据加密等。
2. X509v3 Extended Key Usage(扩展密钥用途):
- TLS Web Server Authentication:TLS Web服务器身份验证
- TLS Web Client Authentication:TLS Web客户端身份验证
- Code Signing:代码签名
- E-mail Protection:电子邮件保护
- Time Stamping:时间戳
- Microsoft Individual Code Signing:Microsoft个人代码签名
- Microsoft Commercial Code Signing:Microsoft商业代码签名
- Microsoft Trust List Signing:Microsoft信任列表签名
- Microsoft Server Gated Crypto:Microsoft服务器门控加密
- Microsoft Encrypted File System:Microsoft加密文件系统
- Netscape Server Gated Crypto:Netscape服务器门控加密
- Microsoft EFS File Recovery:Microsoft EFS文件恢复
- IPSec End System, IPSec Tunnel, IPSec User, IP security end entity:
IPSec终端系统、IPSec隧道、IPSec用户、IP安全终端实体认证等。
(IPSec是一种用于保护网络通信的协议)
- Microsoft Smartcard Login:Microsoft智能卡登录
- OCSP Signing: OCSP签名(在线证书状态协议)
- EAP over PPP, EAP over Lan: PPP和LAN上的EAP(扩展认证协议)认证。
- Signing KDC Response: KDC响应签名(密钥分发中心)
- PKINIT Client Auth: PKINIT客户端认证
- SSH Client: SSH客户端
- Adobe PDF Signing: Adobe PDF签名
- Microsoft Office Signing: Microsoft Office签名
- Microsoft BitLocker Drive Encryption, Microsoft BitLocker Data Recovery Agent:
Microsoft BitLocker驱动器加密、Microsoft BitLocker数据恢复代理。
(BitLocker是一种磁盘加密工具)
3. Netscape Cert Type(Netscape证书类型):
- SSL Client:SSL客户端
- SSL Server:SSL服务器
- S/MIME:S/MIME(安全多用途Internet邮件扩展)
- Object Signing:对象签名
- SSL CA:SSL证书颁发机构
- S/MIME CA:S/MIME证书颁发机构
- Object Signing CA:对象签名证书颁发机构
设置完后,点击右下角的`OK`按钮,创建成功后,如下图所示:
### 导出根证书
选中刚生成的证书,右边菜单栏点击`导出`,选择保存路径即可。
Windows中可以双击打开导出的证书进行查看,MacOS中可以使用空格键来预览证书,如下图所示:
MacOS下的:
### 把根证书导入到系统中
#### Windows 导入根证书
Windows中可以双击打开导出的证书,然后点击`安装证书`-> `当前用户` -> `将所有的证书都放入下列存储` -> `浏览` -> `受信任的根证书颁发机构` -> `下一步` -> `完成` -> `是(Y)`,
如下图所示:
导入完成后,再次打开证书,可以看到本来提示`此CA 根日录证书不受信任。要启用信任,请将该证书安装到"受信任的根证书顾发机构“存储区。`的地方,变成了`这个证书的目的如下`,如下图所示:
#### MacOS 导入根证书
双击证书文件,会弹出一个对话框,要求验证指纹或者密码,进入钥匙串。验证成功后,进入钥匙串主界面,选择【证书】,如下图:
可以看到刚才导入的证书,并显示为`此根证书不被信任`。
双击打开证书,如下图:
点击`信任`,展开选项后,在`使用此证书时`选择`始终信任`,如下图:
打叉关掉窗口后,会再一次要求校验指纹或密码,输入后,回到钥匙串界面,可以看到证书状态已经改变,如下图: