jado4810/privcert
GitHub: jado4810/privcert
一个基于 Ruby 和 Shell 的私有 CA 工具,用于在受限网站上管理用户客户端证书的签发、分发与吊销。
Stars: 1 | Forks: 0
# PrivCert - 用于管理用户证书的私有 CA
[](https://github.com/jado4810/privcert/search?l=Ruby)
[](https://github.com/jado4810/privcert/search?l=Shell)
[](https://github.com/sinatra)
[](https://github.com/docker)
[](https://github.com/jado4810/privcert/blob/main/LICENSE.txt)
EN|[JA](./README-ja.md)
## 这是什么?
用于管理受限网站上客户端认证所需用户证书的简单脚本。
它会建立自签名 CA 并为每个用户生成客户端证书。
## 环境要求
* OpenSSL
* Web 服务器(例如 apache)
## 安装
```
$ make
$ sudo make install
```
`make` 时可用的变量:
* `CA_ROOT` - 证书的存储位置
* 默认值:`/etc/privcert`
* `OPENSSL` - openssl 可执行文件路径
* 默认值:(自动检测)
* `MD5SUM` - md5sum 可执行文件路径
* 默认值:(自动检测)
* `BASE64` - base64 可执行文件路径
* 默认值:(自动检测)
* `DN_BASE` - X.509 DN 的前缀
* 默认值:`/C=JP/ST=Tokyo/O=Your Company`
* 必须包含 C、ST 和 O
* 必须省略 CN 和 emailAddress(需单独设置)
* `EXTRACT_PWD` - 安装时提取用户证书的密码
* 默认值:`privcert`
* `CERT_NAME` - 用户证书的默认名称
* 默认值:`PrivCert`
* 建议设置为网站名称
* `UPDATE_HOOK` - 重新配置 Web 服务器的 hook
* 默认值:`apachectl restart`(使用自动检测到的可执行文件路径)
* `KEYLEN` - 默认密钥长度(以位为单位)
* 默认值:`2048`
* 可通过 `-l` 选项覆盖
* `EXPIRE` - 默认的证书过期天数
* 默认值:`3650`(≒10年)
* 可通过 `-e` 选项覆盖
`make install` 时可用的变量:
* `PREFIX` - 安装前缀
* 默认值:`/usr/local`
* `BINDIR` - 可执行文件的安装位置
* 默认值:`$(PREFIX)/sbin`
此外还支持 `DESTDIR`,在制作软件包时非常有用。
## 准备工作
首先,初始化环境并为本地 CA 生成自签名证书:
```
$ sudo -i privcert init
```
初始化完成后,将显示需要设置到 ssl 配置中的内容。
然后,输入两次服务器模式的密码。
将显示的内容设置到你 Web 服务器的 ssl 配置中。
对于 Apache,请将以下内容追加到 `ssl.conf` 中的 `VirtualHost` 指令内:
```
SSLCACertificateFile /etc/privcert/ca/cert.pem
SSLVerifyClient optional
SSLVerifyDepth 10
SSLCARevocationCheck leaf
SSLCARevocationFile /etc/privcert/ca/crl.pem
SSLRequire %{SSL_CLIENT_S_DN_O} eq "Your Company"
```
`SSLRequire` 中的值应从默认的 "`Your Company`" 更改为在 `DN_BASE` 中指定的 DN 的 O 值。
总之,只需复制显示的配置内容即可。
更新 apache 配置使其生效:
```
$ sudo apachectl restart
```
现在,在安装了由此 CA 签名的客户端证书之前,该网站将无法访问。
## 设置 Web 界面(可选)
若要与 Web 界面配合使用,请在设置 webapp 后将 `privcert` 注册为服务并修改一些配置。
有关更多详细信息,请参阅 [web/README.md](./web/README.md)。
## 用户证书管理
### 生成用户证书
```
$ sudo -i privcert make u̲s̲e̲r̲ [c̲n̲] [e̲m̲a̲i̲l̲]
```
为了能够访问该网站,请将在 `/etc/privcert/users/u̲s̲e̲r̲.pfx` 处生成的证书文件导入到用户的环境中。
通常,只需双击或点按该文件即可将其导入到系统证书存储中;或者在某些环境下,可能需要从浏览器的证书管理菜单中进行导入。
必须提供在 `EXTRACT_PWD` 中设置的固定密码,默认为 `privcert`。
建议使用 [Web 界面](./web/) 来分发证书。
### 显示所有用户证书
```
$ sudo -i privcert list
```
这只会显示 `/etc/privcert/users` 正下方的证书,该目录应仅包含有效的证书。
### 吊销用户证书
```
$ sudo -i privcert revoke u̲s̲e̲r̲
```
被吊销的证书将被添加到证书吊销列表(`crl.pem`)中,因此使用该证书的客户端将无法再进行访问。
并且该证书会被移动到 `/etc/privcert/trash`。
## 待办事项
* 服务器证书(用于 VPN 服务器)
* 更新 CA 证书(是否有必要?)
## 版权与许可
版权所有 (c)2024-2026 Shun-ichi TAHARA <jado@flowernet.jp>
依据 [MIT 许可](./LICENSE.txt) 提供,但不包括 [third-party/getoptions](./third-party/getoptions/) 目录,该目录改编自采用 [CC0](./third-party/getoptions/LICENSE) 许可的 [ko1nksm/getoptions](https://github.com/ko1nksm/getoptions)。
标签:Cutter, Docker, OpenSSL, Ruby, Shell, 安全测试工具, 安全防御评估, 客户端认证, 知识库, 私有CA, 证书管理, 请求拦截