本文目录导读:

我来为您提供一个完整的Java JAR签名案例,包括生成密钥、创建JAR文件、签名和验证的完整流程。
创建示例Java项目
首先创建一个简单的Java程序:
HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, This is a signed JAR!");
}
}
创建META-INF清单文件
MANIFEST.MF
Manifest-Version: 1.0
Created-By: 1.8.0_201 (Oracle Corporation)
Main-Class: HelloWorld
编译和打包JAR文件
# 编译Java文件 javac HelloWorld.java # 创建MANIFEST.MF目录 mkdir -p META-INF # 创建JAR文件 jar cfm HelloWorld.jar META-INF/MANIFEST.MF HelloWorld.class
生成密钥库和证书
# 使用keytool生成密钥对
# -genkeypair: 生成密钥对
# -alias: 别名
# -keyalg: 加密算法
# -keysize: 密钥长度
# -validity: 有效期(天数)
# -keystore: 密钥库文件名
keytool -genkeypair \
-alias mykey \
-keyalg RSA \
-keysize 2048 \
-validity 365 \
-keystore mystore.keystore \
-storepass storepassword \
-keypass keypassword \
-dname "CN=YourName, OU=Development, O=YourCompany, L=City, S=State, C=CN"
签名JAR文件
# 使用jarsigner签名JAR
# -keystore: 密钥库文件
# -storepass: 密钥库密码
# -keypass: 密钥密码
# -signedjar: 签名后的JAR文件名
jarsigner \
-keystore mystore.keystore \
-storepass storepassword \
-keypass keypassword \
-signedjar HelloWorld_signed.jar \
HelloWorld.jar \
mykey
# 或者直接签名原文件
jarsigner \
-keystore mystore.keystore \
-storepass storepassword \
HelloWorld.jar \
mykey
验证签名
# 验证JAR签名 jarsigner -verify -verbose -certs HelloWorld_signed.jar # 或验证原JAR文件 jarsigner -verify -verbose -certs HelloWorld.jar
完整的签名脚本
sign_jar.sh (Linux/Mac)
#!/bin/bash
# 设置变量
KEYSTORE="mystore.keystore"
KEYALIAS="mykey"
STOREPASS="storepassword"
KEYPASS="keypassword"
JARFILE="HelloWorld.jar"
SIGNEDJAR="HelloWorld_signed.jar"
echo "=== JAR签名流程 ==="
# 1. 生成密钥库
echo "1. 生成密钥库..."
keytool -genkeypair \
-alias $KEYALIAS \
-keyalg RSA \
-keysize 2048 \
-validity 365 \
-keystore $KEYSTORE \
-storepass $STOREPASS \
-keypass $KEYPASS \
-dname "CN=YourName, OU=Development, O=YourCompany, L=City, S=State, C=CN"
# 2. 查看密钥库内容
echo "2. 查看密钥库内容..."
keytool -list -v -keystore $KEYSTORE -storepass $STOREPASS
# 3. 签名JAR
echo "3. 签名JAR文件..."
jarsigner \
-keystore $KEYSTORE \
-storepass $STOREPASS \
-keypass $KEYPASS \
-signedjar $SIGNEDJAR \
$JARFILE \
$KEYALIAS
# 4. 验证签名
echo "4. 验证JAR签名..."
jarsigner -verify -verbose -certs $SIGNEDJAR
echo "=== 完成 ==="
sign_jar.bat (Windows)
@echo off
set KEYSTORE=mystore.keystore
set KEYALIAS=mykey
set STOREPASS=storepassword
set KEYPASS=keypassword
set JARFILE=HelloWorld.jar
set SIGNEDJAR=HelloWorld_signed.jar
echo === JAR签名流程 ===
REM 1. 生成密钥库
echo 1. 生成密钥库...
keytool -genkeypair ^
-alias %KEYALIAS% ^
-keyalg RSA ^
-keysize 2048 ^
-validity 365 ^
-keystore %KEYSTORE% ^
-storepass %STOREPASS% ^
-keypass %KEYPASS% ^
-dname "CN=YourName, OU=Development, O=YourCompany, L=City, S=State, C=CN"
REM 2. 查看密钥库内容
echo 2. 查看密钥库内容...
keytool -list -v -keystore %KEYSTORE% -storepass %STOREPASS%
REM 3. 签名JAR
echo 3. 签名JAR文件...
jarsigner ^
-keystore %KEYSTORE% ^
-storepass %STOREPASS% ^
-keypass %KEYPASS% ^
-signedjar %SIGNEDJAR% ^
%JARFILE% ^
%KEYALIAS%
REM 4. 验证签名
echo 4. 验证JAR签名...
jarsigner -verify -verbose -certs %SIGNEDJAR%
echo === 完成 ===
pause
使用Maven进行签名
pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>signed-jar</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<build>
<plugins>
<!-- Maven JAR Plugin: 设置Main-Class -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>HelloWorld</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!-- Maven Jarsigner Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<executions>
<execution>
<id>sign</id>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<keystore>${project.basedir}/mystore.keystore</keystore>
<alias>mykey</alias>
<storepass>storepassword</storepass>
<keypass>keypassword</keypass>
</configuration>
</plugin>
</plugins>
</build>
</project>
导出证书供客户端验证
# 导出证书
keytool -exportcert \
-alias mykey \
-keystore mystore.keystore \
-storepass storepassword \
-file mycert.cer
# 查看证书详细信息
keytool -printcert -file mycert.cer
运行签名的JAR
# 运行签名后的JAR java -jar HelloWorld_signed.jar # 或者在安全策略下运行 java -Djava.security.manager -jar HelloWorld_signed.jar
重要提示
- 密码安全:生产环境中不要硬编码密码,使用环境变量或安全配置
- 密钥保护:妥善保管密钥库文件,定期更新证书
- 时间戳:考虑使用时间戳服务防止证书过期
- 完整性检查:始终验证签名后的JAR完整性
- 证书链:对于发布,考虑使用证书链签名
这个案例涵盖了JAR签名的完整流程,您可以根据实际需求调整参数和配置。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播