本文目录导读:

我来帮你编写自动导入证书的脚本,针对不同操作系统提供多个版本。
Linux 系统 (Bash 脚本)
#!/bin/bash
# 自动导入证书脚本 - Linux版
# 使用方法: ./import_cert.sh [证书文件路径] [证书别名]
# 配置
CERT_PATH="${1:-./certificate.crt}"
CERT_ALIAS="${2:-mycert}"
KEYSTORE_PATH="${JAVA_HOME}/lib/security/cacerts"
KEYSTORE_PASS="changeit" # Java默认密码
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查证书文件
check_cert() {
if [ ! -f "$CERT_PATH" ]; then
echo -e "${RED}错误: 证书文件 $CERT_PATH 不存在${NC}"
exit 1
fi
echo -e "${GREEN}✓ 证书文件存在${NC}"
}
# 检查Java环境
check_java() {
if [ -z "$JAVA_HOME" ]; then
echo -e "${YELLOW}警告: JAVA_HOME 未设置,尝试查找...${NC}"
JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
fi
if [ -z "$JAVA_HOME" ]; then
echo -e "${RED}错误: 找不到Java环境${NC}"
exit 1
fi
echo -e "${GREEN}✓ Java路径: $JAVA_HOME${NC}"
}
# 导入证书
import_cert() {
echo -e "${YELLOW}正在导入证书到信任库...${NC}"
# 备份原有信任库
if [ ! -f "${KEYSTORE_PATH}.backup" ]; then
cp "$KEYSTORE_PATH" "${KEYSTORE_PATH}.backup"
echo -e "${GREEN}✓ 已备份原信任库${NC}"
fi
# 导入证书
sudo keytool -import -trustcacerts \
-alias "$CERT_ALIAS" \
-file "$CERT_PATH" \
-keystore "$KEYSTORE_PATH" \
-storepass "$KEYSTORE_PASS" \
-noprompt
}
# 验证导入
verify_import() {
echo -e "${YELLOW}验证证书导入...${NC}"
if keytool -list -keystore "$KEYSTORE_PATH" \
-storepass "$KEYSTORE_PASS" \
-alias "$CERT_ALIAS" > /dev/null 2>&1; then
echo -e "${GREEN}✓ 证书导入成功!${NC}"
return 0
else
echo -e "${RED}✗ 证书导入失败${NC}"
return 1
fi
}
# 主函数
main() {
echo "========================================"
echo " 自动证书导入脚本 - Linux版本"
echo "========================================"
check_cert
check_java
import_cert
verify_import
echo "========================================"
}
main
Windows 系统 (PowerShell 脚本)
# 自动导入证书脚本 - Windows PowerShell版
param(
[Parameter(Mandatory=$false)]
[string]$CertPath = ".\certificate.cer",
[Parameter(Mandatory=$false)]
[string]$CertStore = "CurrentUser",
[Parameter(Mandatory=$false)]
[string]$StoreLocation = "Root",
[Parameter(Mandatory=$false)]
[string]$JavaHome = $env:JAVA_HOME
)
function Write-ColorOutput {
param(
[string]$Message,
[string]$Color = "White"
)
Write-Host $Message -ForegroundColor $Color
}
function Check-CertFile {
if (-not (Test-Path $CertPath)) {
Write-ColorOutput "错误: 证书文件 $CertPath 不存在" "Red"
exit 1
}
Write-ColorOutput "✓ 证书文件存在" "Green"
}
function Import-ToSystemStore {
Write-ColorOutput "正在导入到Windows证书存储..." "Yellow"
try {
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($CertPath)
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store($StoreLocation, $CertStore)
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($cert)
$store.Close()
Write-ColorOutput "✓ 证书已添加到 $CertStore\$StoreLocation" "Green"
}
catch {
Write-ColorOutput "✗ 导入到系统存储失败: $_" "Red"
}
}
function Import-ToJavaKeystore {
param([string]$CertAlias = "mycert")
if ([string]::IsNullOrEmpty($JavaHome)) {
Write-ColorOutput "警告: JAVA_HOME 未设置,跳过Java信任库导入" "Yellow"
return
}
$keystorePath = Join-Path $JavaHome "lib\security\cacerts"
if (-not (Test-Path $keystorePath)) {
Write-ColorOutput "错误: 找不到Java信任库 $keystorePath" "Red"
return
}
Write-ColorOutput "正在导入到Java信任库..." "Yellow"
# 备份
Copy-Item $keystorePath "$keystorePath.backup"
Write-ColorOutput "✓ 已备份原信任库" "Green"
# 导入证书
$keytool = Join-Path $JavaHome "bin\keytool.exe"
& $keytool -import -trustcacerts `
-alias $CertAlias `
-file $CertPath `
-keystore $keystorePath `
-storepass "changeit" `
-noprompt
if ($LASTEXITCODE -eq 0) {
Write-ColorOutput "✓ Java信任库导入成功" "Green"
} else {
Write-ColorOutput "✗ Java信任库导入失败" "Red"
}
}
# 主程序
Write-Host "========================================"
Write-Host " 自动证书导入脚本 - Windows版本"
Write-Host "========================================"
Check-CertFile
Import-ToSystemStore
Import-ToJavaKeystore
Write-Host "========================================"
Write-Host "处理完成!" -ForegroundColor Green
批量导入证书脚本
#!/bin/bash
# 批量导入证书脚本
# 用于导入目录下的所有证书
CERT_DIR="./certs"
KEYSTORE_PATH="/etc/ssl/certs/java/cacerts"
KEYSTORE_PASS="changeit"
# 为每个证书生成唯一别名
import_all_certs() {
if [ ! -d "$CERT_DIR" ]; then
echo "错误: 证书目录 $CERT_DIR 不存在"
exit 1
fi
count=0
for cert in "$CERT_DIR"/*.{crt,cer,pem}; do
if [ -f "$cert" ]; then
alias="custom-cert-$(basename $cert .${cert##*.})-$(date +%s)"
echo "正在导入: $cert"
sudo keytool -import -trustcacerts \
-alias "$alias" \
-file "$cert" \
-keystore "$KEYSTORE_PATH" \
-storepass "$KEYSTORE_PASS" \
-noprompt
if [ $? -eq 0 ]; then
echo "✓ 成功导入: $cert"
((count++))
else
echo "✗ 导入失败: $cert"
fi
fi
done
echo "共导入 $count 个证书"
}
import_all_certs
使用方法
Linux:
# 给脚本执行权限 chmod +x import_cert.sh # 导入单个证书 ./import_cert.sh /path/to/certificate.crt myalias # 批量导入 ./batch_import.sh
Windows:
# 运行PowerShell脚本 .\import_cert.ps1 -CertPath "C:\path\to\certificate.cer" # 导入到不同存储位置 .\import_cert.ps1 -CertPath "cert.cer" -CertStore "LocalMachine"
注意事项
- 权限要求: Linux需要sudo权限,Windows可能需要管理员权限
- 密码安全: 实际使用时应从环境变量读取密码
- 备份: 脚本已包含备份功能
- 证书格式: 支持 .crt, .cer, .pem 格式
建议先将脚本在测试环境运行,确认无误后再在生产环境使用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播