向阳

生成自签名证书

生成 *.bocloud.local SSL证书完整指南

使用 OpenSSL

1. 生成私钥

openssl genrsa -out bocloud.local.key 2048

2. 创建证书配置文件

创建文件 bocloud.local.conf

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = v3_req

[dn]
C=CN
ST=Beijing
L=Beijing
O=Bocloud Local Development
OU=IT Department
CN=*.bocloud.local

[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.bocloud.local
DNS.2 = bocloud.local
DNS.3 = localhost
DNS.4 = *.localhost
IP.1 = 127.0.0.1
IP.2 = ::1

3. 生成证书签名请求 (CSR)

openssl req -new -key bocloud.local.key -out bocloud.local.csr -config bocloud.local.conf

4. 生成自签名证书

openssl x509 -req -in bocloud.local.csr -signkey bocloud.local.key -out bocloud.local.crt -days 365 -extensions v3_req -extfile bocloud.local.conf

5. 查看证书信息

openssl x509 -in bocloud.local.crt -text -noout

安装和使用证书

在系统中信任证书

Windows:

  1. 双击 .crt 文件
  2. 点击"安装证书"
  3. 选择"本地计算机"
  4. 选择"将所有证书放入下列存储" -> "受信任的根证书颁发机构"

macOS:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain bocloud.local.crt

Linux (Ubuntu/Debian):

sudo cp bocloud.local.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

在浏览器中使用

Chrome/Edge:

  1. 设置 -> 隐私和安全 -> 安全 -> 管理证书
  2. 导入证书到"受信任的根证书颁发机构"

Firefox:

  1. 设置 -> 隐私与安全 -> 证书 -> 查看证书
  2. 导入证书

Web服务器配置示例

Nginx:

server {
    listen 443 ssl;
    server_name *.bocloud.local;
    
    ssl_certificate /path/to/bocloud.local.crt;
    ssl_certificate_key /path/to/bocloud.local.key;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    
    location / {
        # 你的配置
    }
}

Apache:

<VirtualHost *:443>
    ServerName *.bocloud.local
    DocumentRoot /path/to/your/site
    
    SSLEngine on
    SSLCertificateFile /path/to/bocloud.local.crt
    SSLCertificateKeyFile /path/to/bocloud.local.key
    
    SSLProtocol TLSv1.2 TLSv1.3
    SSLCipherSuite HIGH:!aNULL:!MD5
</VirtualHost>

Node.js Express:

const https = require('https');
const express = require('express');
const fs = require('fs');

const app = express();

const options = {
  key: fs.readFileSync('bocloud.local.key'),
  cert: fs.readFileSync('bocloud.local.crt')
};

https.createServer(options, app).listen(443, () => {
  console.log('HTTPS Server running on https://app.bocloud.local');
});

Docker Compose:

version: '3.8'
services:
  web:
    image: nginx
    ports:
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./bocloud.local.crt:/etc/ssl/certs/bocloud.local.crt
      - ./bocloud.local.key:/etc/ssl/private/bocloud.local.key

验证证书

使用 OpenSSL 验证

openssl x509 -in bocloud.local.crt -text -noout | grep -A 1 "Subject Alternative Name"

使用 curl 测试

curl -v https://app.bocloud.local --cacert bocloud.local.crt

使用浏览器测试

访问 https://app.bocloud.local 确保没有SSL警告。

注意事项

  1. 有效期: 证书默认有效期为365天,可以根据需要调整
  2. 私钥安全: 请妥善保管私钥文件,不要提交到版本控制系统
  3. 域名匹配: 通配符证书 *.bocloud.local 只匹配一级子域名
  4. 浏览器兼容性: 确保浏览器信任自签名证书
  5. 自动化: 可以将证书生成过程集成到开发环境的启动脚本中

故障排除

常见错误:

  • NET::ERR_CERT_AUTHORITY_INVALID: 证书未被信任,需要安装到系统信任存储
  • NET::ERR_CERT_COMMON_NAME_INVALID: 域名不匹配,检查SAN扩展
  • ERR_SSL_VERSION_OR_CIPHER_MISMATCH: SSL配置问题,检查服务器SSL设置

解决方案:

  1. 确保证书已正确安装到系统信任存储
  2. 验证DNS指向正确(添加到 /etc/hosts)
  3. 检查服务器SSL配置
  4. 使用现代SSL协议和密码套件
Tags:
ssl

Blog with 向阳 [email protected]

粤ICP备2020128944号