本文原载于 https://www.idc.moe/archives/qcloud-Lighthouse-EJBCA-build.html
作者: iks
一、名词解释和综述
1.1. PKI
PKI (Public Key Infrastructure) 公钥基础设施,又称为公钥基础架构、公钥基础建设或公钥基础机构,是一组由硬件、软件、参与者、管理政策与流程组成的基础架构,能够为所有网络应用提供加密和数字签名等密码服务及所必须的密钥和证书管理体系,简单来说 PKI 就是利用公钥理论和技术建立的提供的安全服务设施,其目的在于创造、管理、分配、使用、存储以及撤销数字证书。
一个基础的 PKI 系统包括狭义上的证书颁发机构 (Certificate Authority, CA)、注册管理机构 (Registration Authority, RA) 和相应的 PKI 存储库。CA 用于签发并管理中间证书;RA 可以是 CA 的一部分,其功能包括身份或许可验证、CRL 管理、签发最终证书等;PKI 存储库包括 LDAP 目录服务器和普通数据库,用于对用户申请、证书、密钥、CRL 和日志等信息进行存储、管理并提供查询服务。
1.2. CA
广义上的 CA 指 PKI 中的 CA 和 RA。CA 是证书的签发机构,它是公钥基础设施的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。
本文涉及到的 CA 有时指狭义上的 CA,有时指 CA 和 RA 组成的整体,他们的区别不影响阅读理解和实践操作。
1.3. EJBCA
EJBCA 是一款历史悠久且至今仍在活跃维护和开发的基于 JavaEE 平台的 PKI 实现软件,能够在 Windows 和 Linux 各大发行版上独立运行或集成在 WildFly 和 JBoss EAP 等基于JavaEE的应用服务器上。EJBCA 提供了强大高效的 CA 及 RA 一体化功能,支持硬件安全模块 (Hardware Security Module, HSM)、集群和动态扩展,除了适合于供 CA/PKI 方案研究之外,它还完全能够胜任企业级应用场景乃至于承载公共 CA 的 PKI 体系。
本文旨在使用腾讯云轻量应用服务器通过将 EJBCA 集成至 JBoss EAP 以搭建一个自有 CA/PKI 系统并实践签发各类数字证书。
二、准备操作
2.1. 服务器准备
由于 JBoss EAP 是一个基于 JavaEE 的服务器程序,因此占用的内存会比较大,故建议选用 2GB 或更高内存的机器用作生产环境(图中红色方框内的套餐)。这里笔者选用的是腾讯云轻量应用服务器通用型套餐2C4G8M。

系统建议选用 Ubuntu 或 Debian,CentOS 7 的软件包过于陈旧可能会对部署和运行产生影响,笔者选用的是 Ubuntu 20.04 LTS。
2.2. 软件包准备
2.2.1. 包安装相关组件和依赖
依次执行以下命令:
- apt update
- apt install wget default-jdk-headless ant ant-optional unzip -y
- apt install openjdk-8-jdk -y
复制代码
2.2.2. 调整 Java 环境为 OpenJDK 8
依次执行以下命令:
- update-alternatives --config java
- update-alternatives --config javac
复制代码
修改为 OpenJDK 8。

编辑 /etc/profile,将以下内容附加到末尾并保存:
- export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- export JRE_HOME=$JAVA_HOME/jre
- export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
- export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
复制代码

执行 source /etc/profile 以应用配置,并执行 java -version 和 javac -version 以检查和确认 Java 环境已经调整为 OpenJDK 8。

2.2.3. 软件包下载
由于 JBoss EAP 7.3.0 + EJBCA 7.4.3 组合在笔者尝试 5 后依旧部署失败,故本文将以 JBoss EAP 6.4.0 (April 15, 2015) + EJBCA 6.15.2.6 (April 6, 2020) (两者均为 6 系列的最后一个版本)作为演示。
JBoss EAP 6.4.0 下载地址: https://developers.redhat.com/content-gateway/file/jboss-eap-6.4.0.GA-installer.jar (需要登录 RedHat 账号后下载至本地再上传至服务器)
EJBCA 6.15.2.6 下载地址: https://sourceforge.net/projects/ejbca/files/ejbca6/ejbca_6_15_2_6/ejbca_ce_6_15_2_6.zip (需要下载至本地再上传至服务器)

2.3. 数据库准备
为了效率、灵活性和可迁移性,建议将 EJBCA 搭配数据库使用。EJBCA支持MariaDB, MySQL, Oracle 数据库和 PostgreSQL 等类型的数据库,本文以 MariaDB 演示。
2.3.1. 包安装 Mariadb 数据库
本文仅演示包安装,若需编译安装,请自行查找相关教程。
执行 apt install mariadb-server -y 安装 Mariadb。
安装完成后,执行 mysql_secure_installation 初始化。

2.3.2. 修改数据库默认编码为 UTF-8 并创建数据库
Mariadb 和 MySQL 默认的字符集utf8mb4 会触发索引限制,导致 EJBCA 无法启动,故需修改 Mariadb 和 MySQL 的默认字符集。
修改 /etc/mysql/my.cnf,增加以下内容:
- [mysqld]
- character-set-server=utf8
- collation-server=utf8_general_ci
复制代码

修改 /etc/mysql/mariadb.conf.d/50-client.cnf 第 8 行,将 default-character-set = utf8mb4 改为 default-character-set = utf8 并保存。

修改 /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf 第 8 行,将 default-character-set = utf8mb4 改为 default-character-set = utf8 并保存。

修改 /etc/mysql/mariadb.conf.d/50-server.cnf 第 104, 105 行,将
- character-set-server = utf8mb4
- collation-server = utf8mb4_general_ci
复制代码
改为
- character-set-server = utf8
- collation-server = utf8_general_ci
复制代码
并保存。

执行 systemctl restart mariadb 以应用更改。
输入 mysql -u root -p 登陆 Mariadb 服务器,执行 show variables like "%character%"; 查询编码,若均为 UTF-8 (如图所示),则执行 CREATE DATABASE ejbca;

其中 ejbca 为数据库名,输入 exit 退出。
若您不想修改数据库的默认字符集,则请输入 mysql -u root -p 登陆 Mariadb 服务器,执行 CREATE DATABASE ejbca CHARACTER SET utf8 COLLATE utf8_unicode_ci;
其中 ejbca 为数据库名,输入 exit 退出。
此外,强烈推荐使用新发布的腾讯云轻量数据库服务器,内网连接延迟低于毫秒级、多级冗余备份,强劲的性能可以轻松应对突发的海量查询,非常适合 EJBCA 的使用场景,是替代在本机运行数据库服务器的不二之选!
2.3.3. 创建用户并赋权
输入 mysql -u root -p 登陆 Mariadb 服务器,依次执行以下语句:
- CREATE USER 'ejbca'@'localhost' IDENTIFIED BY 'ejbca';
- GRANT ALL ON *.* TO 'ejbca'@'localhost';
复制代码
其中 ejbca 分别为数据库用户名和密码。

输入 exit 退出。
三、安装并配置 JBoss EAP
3.1. 安装 JBoss EAP
将 JBoss EAP jar 安装包上传至服务器,执行 java -jar jboss-eap-6.4.0-installer.jar,来到 JBoss EAP 交互安装界面,Select language 时选择 1: chn(中文)

接下来是 END USER LICENSE AGREEMENT 部分,按 1 继续;选择安装路径,若不想自定义请直接回车,后按 1 确定; “想安装的软件包”建议全选(直接按 0 即可确认);Quickstarts 选择否(按 0);“套接字绑定”选择“”为独立和域模式选择默认的端口绑定”(按 0);“启用纯粹的 IPv6 配置”按 0 取消选择;“服务器启动模式”选择“请不要启动服务器”(按 0);“日志选项”选择否(按 0);“配置运行时环境”选择“执行默认配置”(按 0)。

交互之后将进行解包安装,数十秒后安装就算完成了。
3.2. 修改 JBoss EAP Web UI 监听地址
修改 /root/EAP-6.4.0/standalone/configuration/standalone.xml (/root/EAP-6.4.0 为 JBoss EAP 安装目录),将 <interfaces> 中的 jboss.bind.address.management:127.0.0.1, jboss.bind.address:127.0.0.1 和 jboss.bind.address.unsecure:127.0.0.1 共 3 处的 127.0.0.1 修改为 0.0.0.0 并保存。

3.3. 启动并测试 JBoss EAP 服务
新建一个 SSH 连接,执行 /root/EAP-6.4.0/bin/standalone.sh (/root/EAP-6.4.0 为 JBoss EAP 安装目录)后访问 http://机器的 IP 地址:8080,如若能够打开相应界面,说明 JBoss EAP 安装成功。

由于此时 JBoss EAP 处于 Standalone 模式,不要退出程序或关闭此 SSH 会话,请切到上一个空闲的 SSH 会话继续下面的步骤。
1/2 |