`

java证书签名

    博客分类:
  • java
阅读更多
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PushbackReader;
import java.security.KeyStore;
import java.security.Principal;
import java.security.PrivateKey;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Arrays;

import sun.security.x509.CertificateIssuerName;
import sun.security.x509.X500Name;
import sun.security.x509.X509CertImpl;
import sun.security.x509.X509CertInfo;

public class CertificateSigner {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

String ksname=null;
String alias=null;
String inname=null;
String outname=null;
for(int i=0;i<args.length;i++)
{
if(args[i].equals("-keystore"))
ksname=args[++i];
else if(args[i].equals("-alias"))
alias=args[++i];
else if(args[i].equals("-infile"))
inname=args[++i];
else if(args[i].equals("-outfile"))
outname=args[++i];
else usage();
}

if(ksname==null||alias==null||inname==null||outname==null||outname==null)usage();

try
{
PushbackReader console=new PushbackReader(new InputStreamReader(System.in));

KeyStore store=KeyStore.getInstance("JKS","SUN");
InputStream in=new FileInputStream(ksname);
System.out.print("Keystore password:");
System.out.flush();
char[] password=readPassword(console);

store.load(in,password);
Arrays.fill(password,' ');
in.close();

System.out.println("Key password for "+alias+": ");
System.out.flush();
char[] keyPassword=readPassword(console);
PrivateKey issuerPrivateKey=(PrivateKey) store.getKey(alias, keyPassword);
Arrays.fill(keyPassword, ' ');

if(issuerPrivateKey==null)error("No such private key");

in=new FileInputStream(inname);
CertificateFactory factory=CertificateFactory.getInstance("X.509");
X509Certificate inCert=(X509Certificate) factory.generateCertificate(in);
in.close();
byte[] inCertBytes=inCert.getTBSCertificate();

X509Certificate issuerCert=(X509Certificate) store.getCertificate(alias);
Principal issuer=issuerCert.getSubjectDN();
String issuerSigAlg=issuerCert.getSigAlgName();

FileOutputStream out=new FileOutputStream(outname);
X509CertInfo info=new X509CertInfo(inCertBytes);
info.set(X509CertInfo.ISSUER, new CertificateIssuerName((X500Name)issuer));
X509CertImpl outCert=new X509CertImpl(info);
outCert.sign(issuerPrivateKey, issuerSigAlg);
outCert.derEncode(out);
out.close();


}catch(Exception e)
{
e.printStackTrace();
}
}

private static char[] readPassword(PushbackReader in)throws IOException
{
final int MAX_PASSWORD_LENGTH=100;
int length=0;
int flag=0;
char[] buffer=new char[MAX_PASSWORD_LENGTH];
while(true)
{
int ch=in.read();

if(ch=='\r'||ch=='\n'||ch==-1||length==MAX_PASSWORD_LENGTH)
{
if(ch=='\r')
{
ch=in.read();
if(ch!='\n'&&ch!=-1)
{
in.unread(ch);
}


                                      if(length==0&&flag==0)
{
length=1;
}
char[] password=new char[length];
System.arraycopy(buffer, 0, password, 0, length);
                                      if(length==0&&flag==0)
{
length=0;
flag=1;
}
//Arrays.fill(buffer,' ');
return password;
}else
{
buffer[length]=(char) ch;
length++;
}
}
}
}

private static void error(String message)
{
System.out.println(message);
System.exit(1);
}
private static void usage()
{
System.out.println("Usage:java CertificateSigner"+" -keystore keystore -alias issuerKeyAlias"+" -infile inputFile -outfile outputFile");
System.exit(1);
}
}


证书签名
1)javac *.java
创建一个密钥库
2)keytool -genkey -keystore czm.store -alias czm
导出证书文件
3)keytool -export -keystore czm.store -alias czm -file czm.cert
打印证书
4)keytool -printcert -file czm.cert
把证书输入密钥库中
5)keytool -import -keystore czm1.store alias czm1 -file czm.cert
把要签名的文档加入到jar中
6)jar cvf document.jar document.txt
将签名添加到文件中
7)jarsigner -keystore czm.store document.jar czm
客户端校验
8)jarsigner -verify -keystore czm1.store document.jar
签名匹配将会打印:java verified

分享到:
评论

相关推荐

    Java签名证书信息查看工具

    Java签名证书信息查看工具是Java开发中用于检查和管理数字证书及密钥对的重要辅助工具。在Java应用程序或JAR文件发布时,为了确保代码安全和防止篡改,通常需要进行签名。Java签名证书信息查看工具就是在这个背景下...

    Certificate_java_java数字签名_java签名证书_数字证书_

    在Java编程环境中,数字证书和数字签名是网络安全和数据完整性的重要组成部分。这些概念与Java的加密库和证书处理机制紧密相关。在这个项目中,我们似乎有一个包含Java实现数字证书和数字签名功能的源码模块。 首先...

    Java实现浏览器CA证书的签名和验证

    ### Java实现浏览器CA证书的签名和验证 #### 概述 随着互联网的普及和技术的发展,网络安全成为了维护用户信心和确保电子商务顺利进行的关键因素之一。在众多保障网络安全的技术中,数字证书及其背后的公钥基础...

    java 数字签名 证书加载

    Java 数字签名与证书加载是Java安全编程中的关键部分,主要涉及到网络安全、数据完整性和身份验证。在Java中,数字签名通常使用X.509证书来存储公钥和私钥对,这些证书用于实现非对称加密算法,如RSA或DSA。本项目是...

    java 国密算法实现包含SM2 SM3 SM4和数字签名、数字证书的验证

    下面将详细介绍这些算法以及它们在Java中的实现,以及如何进行数字签名和数字证书的验证。 1. **SM2算法**:SM2是一种基于椭圆曲线密码学(ECC)的公钥加密算法,用于非对称加密。它提供了密钥交换、签名和验证的...

    java数字签名(签名生成,用证书验证签名).doc

    总之,Java数字签名是基于公钥加密技术的一种安全机制,它通过证书确保公钥的可信性,并通过签名验证数据的完整性和发送者的身份。在实际开发中,理解并正确使用这些概念对于构建安全的网络应用至关重要。

    java数字签名(签名生成,用证书验证签名)[汇编].pdf

    java数字签名(签名生成,用证书验证签名)[汇编].pdf

    java数字签名(签名生成,用证书验证签名)[定义].pdf

    4. 发行者名称(Issuer Name):证书发行者名,也就是给这个证书签名的机构名。 5. 有效期(Validity Period):证书有效时间范围。 6. 主题名称(Subject Name):被证书发行机构签名后的公钥拥有者或实体的名字,...

    java生成及验证android签名文件源码及生成签名文件

    签名过程涉及到了Java的关键组件——Java Key Store(JKS),这是Java提供的一个安全存储密钥和证书的容器。 生成Android签名文件通常使用Java的`keytool`命令行工具,它包含在Java Development Kit (JDK) 中。以下...

    Java 数字签名、数字证书生成源码.rar

    Java 数字签名与数字证书是安全领域中的重要概念,它们在软件开发中起着至关重要的作用,尤其是在确保数据完整性和身份验证方面。本资源包含的Java代码工具包提供了生成数字签名和数字证书的源码,这有助于开发者...

    Java 数字签名、数字证书生成源码.zip

    Java 数字签名和数字证书是网络安全领域中的重要概念,它们在确保数据的完整性和来源的可信性方面扮演着关键角色。这份"Java 数字签名、数字证书生成源码"的压缩包提供了实现这些功能的代码示例,对于理解和应用Java...

    java实现pdf文件电子签名

    在Java环境中实现PDF文件的电子签名,主要涉及到数字证书的生成、PDF处理库的使用以及签名的嵌入操作。下面将详细介绍这个过程。 首先,我们需要了解PFX(Personal Information Exchange)证书。PFX是一种包含了...

    创建pkcs12格式数字签名证书的Java代码

    本文将深入探讨如何使用BouncyCastle库在Java中创建PKCS12格式的数字签名证书。 首先,理解BouncyCastle库。BouncyCastle是一个开放源代码的Java密码学API,提供了大量的加密算法、协议和实用工具类。对于处理PKCS#...

    java 数字签名验签

    Java 数字签名是一种用于验证数据完整性和发送者身份的安全机制,它是基于公钥加密技术的。在Java中,数字签名通常使用Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE) 提供的API来实现...

    数字签名、数字证书分析与Java实现.rar_java 签名 证书_数字签名 rsa_证书_证书解密_证书验证

    在IT领域,数字签名和数字证书...综上所述,数字签名和数字证书是保障网络通信安全的关键技术,Java提供了丰富的API支持这些操作的实现。在实际应用中,理解并正确使用这些概念和工具对于构建安全的网络系统至关重要。

    Java Web Start 签名

    总结起来,Java Web Start签名是Java应用程序在网络环境中保证安全的关键技术,它涉及到代码签名、证书管理、验证过程和权限控制。在实际开发中,开发者需要确保所有分发的Java代码都经过正确的签名,以提供一个安全...

    Java 数字签名、数字证书生成源码.7z

    Java 数字签名与数字证书是网络安全领域中的重要概念,它们在确保数据的完整性和来源的可信性方面扮演着关键角色。在这个"Java 数字签名、数字证书生成源码"压缩包中,包含了实现这些功能的源代码,对于理解Java安全...

Global site tag (gtag.js) - Google Analytics