Files
demo/examples/scripts/generate_cert.ps1
2025-03-14 18:50:49 +00:00

85 lines
2.8 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PowerShell 脚本:生成自签名证书
# 处理命令行参数
param(
[Parameter(HelpMessage="证书有效期(天数)")]
[int]$days = 365,
[Parameter(HelpMessage="证书主题")]
[string]$subject = "CN=localhost,OU=Test,O=GoProxy,L=Shanghai,S=Shanghai,C=CN",
[Parameter(HelpMessage="公用名(CN)")]
[string]$cn = "",
[Parameter(HelpMessage="显示帮助信息")]
[switch]$help
)
# 帮助信息
function Show-Help {
Write-Host "生成自签名证书"
Write-Host
Write-Host "用法: .\generate_cert.ps1 [选项]"
Write-Host
Write-Host "选项:"
Write-Host " -help 显示此帮助信息"
Write-Host " -days DAYS 证书有效期(天数),默认: 365"
Write-Host " -subject SUB 证书主题,默认: $subject"
Write-Host " -cn CN 公用名(CN)将替换主题中的CN默认: localhost"
Write-Host
Write-Host "示例:"
Write-Host " .\generate_cert.ps1 -days 730 -cn example.com"
Write-Host
}
# 如果请求帮助,显示帮助信息并退出
if ($help) {
Show-Help
exit 0
}
# 如果指定了CN替换主题中的CN部分
if ($cn -ne "") {
$subject = $subject -replace "CN=[^,]*", "CN=$cn"
}
Write-Host "生成自签名证书..."
Write-Host "有效期: $days"
Write-Host "主题: $subject"
# 检查OpenSSL是否可用
$openssl = Get-Command "openssl" -ErrorAction SilentlyContinue
if (-not $openssl) {
Write-Host "错误: 未找到OpenSSL命令。请安装OpenSSL并确保它在PATH环境变量中。" -ForegroundColor Red
Write-Host "您可以从以下地址下载OpenSSL for Windows: https://slproweb.com/products/Win32OpenSSL.html" -ForegroundColor Yellow
exit 1
}
try {
# 生成私钥
Write-Host "正在生成私钥..." -ForegroundColor Cyan
& openssl genrsa -out server.key 2048
# 生成证书请求
Write-Host "正在生成证书请求..." -ForegroundColor Cyan
& openssl req -new -key server.key -out server.csr -subj $subject.Replace(",", "/")
# 生成自签名证书
Write-Host "正在生成自签名证书..." -ForegroundColor Cyan
& openssl x509 -req -days $days -in server.csr -signkey server.key -out server.crt
# 删除证书请求文件
Remove-Item server.csr -Force
Write-Host "完成!已生成以下文件:" -ForegroundColor Green
Write-Host " - server.key: 私钥" -ForegroundColor Green
Write-Host " - server.crt: 证书" -ForegroundColor Green
Write-Host
Write-Host "您可以使用这些文件启动HTTPS代理:" -ForegroundColor Cyan
Write-Host "go run cmd/custom_dns_https_proxy/main.go -cert server.crt -key server.key" -ForegroundColor Cyan
}
catch {
Write-Host "错误: 生成证书时发生错误: $_" -ForegroundColor Red
exit 1
}