jado4810/privcert

GitHub: jado4810/privcert

一个基于 Ruby 和 Shell 的私有 CA 工具,用于在受限网站上管理用户客户端证书的签发、分发与吊销。

Stars: 1 | Forks: 0

# PrivCert - 用于管理用户证书的私有 CA [![Ruby](https://img.shields.io/github/languages/top/jado4810/privcert?logo=ruby&logoColor=fff&label=Ruby&labelColor=cc342d&color=666)](https://github.com/jado4810/privcert/search?l=Ruby) [![Shell](https://img.shields.io/badge/Shell-4eaa25?logo=gnu-bash&logoColor=fff)](https://github.com/jado4810/privcert/search?l=Shell) [![Sinatra](https://img.shields.io/badge/-Sinatra-000?logo=ruby-sinatra&logoColor=fff)](https://github.com/sinatra) [![Docker](https://img.shields.io/badge/-Docker-2496ed?logo=docker&logoColor=fff)](https://github.com/docker) [![MIT License](https://img.shields.io/github/license/jado4810/privcert?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMjUiPjxwYXRoIGQ9Ik04LDB2MTRNNCwxNGg4TTEsNGgzbDMtMWgybDMsMWgzTTMsNGwtMi41LDZxMi41LDEuNSw1LDB6TTEzLDRsLTIuNSw2cTIuNSwxLjUsNSwweiI+PC9wYXRoPjwvc3ZnPgo%3D)](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, 证书管理, 请求拦截