# easyca **Repository Path**: developerhonor/easyca ## Basic Information - **Project Name**: easyca - **Description**: 一个自动化生成签名认证的工具 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2025-09-05 - **Last Updated**: 2025-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # easyca - 简易证书管理工具 easyca 是一个简单易用的证书管理工具,用于生成根证书、服务器证书和客户端证书,适用于开发和测试环境。也可以配置HTTPS和双向SSL/TLS验证的场景。 ## 项目结构 ``` easyca ├── bin │ └── easyca # 主执行脚本 ├── config │ └── cert.cnf # 证书配置文件 ├── lib │ └── funclib # 函数库文件 ├── LICENSE └── README.md ``` ## 安装依赖 easyca依赖以下软件包: ```bash # CentOS/RHEL系统 sudo yum install -y openssl ``` ## 配置文件 easyca使用`config/cert.cnf`作为证书配置模板。以下是默认配置: ```ini [ req ] default_bits = 2048 default_md = sha256 distinguished_name = req_distinguished_name attributes = req_attributes req_extensions = v3_req string_mask = utf8only [ req_distinguished_name ] countryName = CN countryName_default = CN stateOrProvinceName = Shanghai stateOrProvinceName_default = Shanghai localityName = Hongqiao localityName_default = Hongqiao organizationName = Song organizationName_default = Song organizationalUnitName = Development organizationalUnitName_default = Development commonName = song.com commonName_default = $DOMAIN [ req_attributes ] challengePassword = Challenge Password challengePassword_min = 8 [ v3_req ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth subjectAltName = DNS:shaohua.com,DNS:www.shaohua.com ``` ### 建议修改的配置内容 1. **修改组织信息**: - `organizationName_default`: 修改为您的组织名称 - `organizationalUnitName_default`: 修改为您的部门名称 2. **修改域名信息**: - `commonName`: 修改为您的默认域名 - `subjectAltName`: 修改为您实际使用的域名列表 3. **修改密钥强度**(可选): - `default_bits`: 可以增加到4096以提高安全性 ## 使用方法 ```bash ./bin/easyca [-d|--debug] [-h|--help] [additional-domains...] ``` ### 选项 - `-d, --debug`: 启用调试模式,提供详细日志 - `-h, --help`: 显示帮助信息 ### 示例 1. **生成简易证书**: ```bash ./easyca song.com ``` 2. **生成包含子域名的证书**: ```bash ./easyca song.com api.song.com admin.song.com ``` ## DEBUG 模式 启用调试模式可以查看详细的执行日志: ```bash ./easyca -d song.com api.song.com ``` ## 生成的文件 执行脚本后,将在项目目录中生成以下文件: - 根证书: `ca/rootCA.crt` - 服务器证书: `certs/.crt` - 服务器私钥: `certs/.key` - 服务器证书链: `certs/-chain.pem` - 客户端证书: `certs/-client.crt` - 客户端私钥: `certs/-client.key` - 客户端证书链: `certs/-client-chain.pem` - 客户端PKCS12格式: `certs/-client.p12` (密码: changeit) - Java KeyStore: `certs/-client.jks` (密码: changeit) (如果安装了Java) - Java TrustStore: `certs/-truststore.jks` (密码: changeit) (如果安装了Java) ## Nginx HTTPS配置指南 使用easyca生成的证书配置Nginx HTTPS服务的步骤如下: ### 完整的Nginx配置示例 ```nginx server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name _; # 服务器证书配置 ssl_certificate /opt/software/easyca/certs/song.com-chain.pem; ssl_certificate_key /opt/software/easyca/certs/song.com.key; # 客户端证书验证配置(双向认证) ssl_client_certificate /opt/software/easyca/ca/rootCA.crt; ssl_verify_client on; ssl_verify_depth 2; # SSL协议配置 ssl_protocols TLSv1.2 TLSv1.3; # 加密套件配置 ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on; # SSL会话设置 ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; # OCSP Stapling配置 ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # 安全头设置 add_header Strict-Transport-Security "max-age=63072000" always; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options SAMEORIGIN; add_header X-XSS-Protection "1; mode=block"; # 网站根目录 root /usr/share/nginx/html; index index.html index.htm; # 错误页面配置 error_page 403 /403.html; location = /403.html { internal; } error_page 404 /404.html; location = /404.html { internal; } error_page 500 502 503 504 /50x.html; location = /50x.html { internal; } # 主请求处理 location / { if ($ssl_client_verify != SUCCESS) { return 403; } try_files $uri $uri/ =404; } # 禁止访问隐藏文件 location ~ /\.(?!well-known).* { deny all; } } ``` ### 配置说明 1. **证书路径**: - 将`/opt/software/easyca/certs/song.com-chain.pem`替换为您实际的证书链路径 - 将`/opt/software/easyca/certs/song.com.key`替换为您实际的私钥路径 - 将`/opt/software/easyca/ca/rootCA.crt`替换为您实际的根CA证书路径 2. **客户端证书验证**: - `ssl_verify_client on`: 强制要求客户端证书 - 如果不需要客户端证书验证,可以设置为`off`或`optional` 3. **安全增强**: - 配置中包含了现代TLS协议和密码套件 - 启用了HSTS以强制客户端使用HTTPS - 启用了OCSP Stapling以提高性能和安全性 ## 客户端证书配置 ### 浏览器导入客户端证书 为了使用双向SSL/TLS验证,需要将客户端证书导入到浏览器中: **Chrome/Edge/Firefox**: 1. 导入PKCS12格式的客户端证书 (`certs/-client.p12`) 2. 输入密码: `changeit` 3. 浏览器会自动选择适当的证书类型 **注意**: 访问启用了双向SSL验证的网站时,浏览器会提示您选择证书。选择导入的客户端证书后即可正常访问。 ### 导入根证书到系统 为了让浏览器信任生成的证书,需要将根证书(`ca/rootCA.crt`)导入到操作系统的证书存储中,在 Google Chrome 中,可以执行以下操作: 1. 打开 Chrome 浏览器 2. 输入 `chrome://settings/security`,点击管理证书 3. 选择 `管理从Windows导入的证书` 选项卡 4. 默认个人证书,将p12结尾的证书导入到个人证书中,需输入密码 `changeit` 5. 然后选择收信人的根证书颁发机构,将rootCA.crt文件导入到根证书颁发机构中 6. 点击 `导入` 按钮 7. 确保根证书已添加到列表中 然后重启浏览器或者清楚缓存,可通过http://ip地址或者域名,自动跳转到 https://IP地址或者域名,即可访问。