`

签字证书例子

阅读更多

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 {    
  public static void main(String[] args) {    
    String ksname = null; // the keystore name    
    String alias = null; // the private key alias    
    String inname = null; // the input file name    
    String outname = null; // the output file name    
    for (int i = 0; i < args.length; i += 2) {    
      if (args[i].equals("-keystore"))    
        ksname = args[i + 1];    
      else if (args[i].equals("-alias"))    
        alias = args[i + 1];    
      else if (args[i].equals("-infile"))    
        inname = args[i + 1];    
      else if (args[i].equals("-outfile"))    
        outname = args[i + 1];    
      else   
        usage();    
    }    
   
    if (ksname == null || alias == null || inname == null   
        || outname == null)    
      usage();    
   
    try {    
      PushbackReader console = new PushbackReader(new InputStreamReader(    
          System.in));    
   
      KeyStore store = KeyStore.getInstance("JKS", "SUN");    
      InputStream in = new FileInputStream(ksname);    
      char[] password = readPassword(console, "Keystore password");    
      store.load(in, password);    
      Arrays.fill(password, ' ');    
      in.close();    
   
      char[] keyPassword = readPassword(console, "Key password for "   
          + alias);    
      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 exception) {    
      System.out.println(exception);    
    }    
  }    
   
  public static char[] readPassword(PushbackReader in, String prompt)    
      throws IOException {    
    System.out.print(prompt + ": ");    
    System.out.flush();    
    final int MAX_PASSWORD_LENGTH = 100;    
    int length = 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') // handle DOS "\r\n" line ends    
        {    
          ch = in.read();    
          if (ch != '\n' && ch != -1)    
            in.unread(ch);    
        }    
        char[] password = new char[length];    
        System.arraycopy(buffer, 0, password, 0, length);    
        Arrays.fill(buffer, ' ');    
        return password;    
      } else {    
        buffer[length] = (char) ch;    
        length++;    
      }    
    }    
  }    
   
  public static void error(String message) {    
    System.out.println(message);    
    System.exit(1);    
  }    
   
  public static void usage() {    
    System.out.println("Usage: java CertificateSigner"   
        + " -keystore keyStore -alias issuerKeyAlias"   
        + " -infile inputFile -outfile outputFile");    
    System.exit(1);    
  }    
}
分享到:
评论

相关推荐

    C#数据安全基础 哈希算法 私钥 数字签字 证书

    网上转了好多圈,发现数据安全的资料太少,好用的源码就更少了,所以自己决定做一个示例的集合,供大家参考和使用。 一些C#中数据安全的基本处理以及综合使用的实际例程。...方便好用,里面是我做的多个例子的集合。

    监理审核意见签字范例.doc

    文档“监理审核意见签字范例.doc”提供了监理工程师在不同施工环节中审核并签署意见的典型例子,这些例子涵盖了从工程开始到结束的各个关键步骤。以下是对这些知识点的详细说明: 1. **工程开工报审表**:监理...

    科学技术成果评审证书模板.pdf

    在这个例子中,评审形式是会议评审,这意味着有一组专家聚集在一起,听取项目团队的汇报,并对相关技术文件进行审查。 在简要技术说明和主要技术性能指标部分,通常会概述科研项目的创新点、核心技术以及实现的主要...

    (完整word版)授权方的软件著作权证书和相应授权关系证明.doc

    此文档标题提及的"(完整word版)授权方的软件著作权证书和相应授权关系证明",主要涉及到以下几个核心知识点: 1. **软件著作权**:根据《中华人民共和国著作权法》,软件开发者对其开发的软件享有著作权,包括但不...

    检测单位资格报审表资料.docx

    在这个例子中,施工单位——南充市公信检测,被提名为进行相关检测工作的单位。 1. **企业营业执照**:这是企业合法运营的基础,表明检测单位已经通过了工商行政管理部门的注册,具有合法经营的身份。 2. **检测...

    公章刻制承诺书.docx

    在《合同法》中,合同的成立不仅可以通过法人代表的签字确认,亦可通过盖章的方式生效。因此,公章的使用须严格遵守相关法律法规,保证其使用过程的合法性和规范性。 承诺书作为一种特殊的法律文件,是签署方对特定...

    工程款支付报审表.pdf

    接下来,项目监理机构会出具工程款支付证书,再次确认同意支付的金额,并由总监理工程师签字并加盖执业印章,进一步增强了支付决定的正式性和权威性。这份证书同样是一式三份,分发给项目监理机构、建设单位和施工...

    认 证 合 同 更 改 协 议 书.docx

    8. **认证机构**:在这个例子中,认证方是北京国建联信认证中心有限公司,它是一家提供产品认证、质量管理体系、环境管理体系和职业健康安全管理认证的专业机构,需遵守相关的国家法律法规和国际标准。 总结来说,...

    贷款担保承诺书.docx

    在文中的例子中,担保期间为两年。 4. **担保金额**:担保金额是担保人承诺承担的最高还款额度,如果借款人未能偿还的贷款本息超出这个数额,担保人无需承担超出部分。 5. **财产证明**:担保人通常需要提供财产...

    凭规格销售合(DOC格式).doc

    7. **验收与交割**:第五条描述了气垫船的检验和验收流程,包括试航和签署交船证书,证书的法律效力和风险转移的时间点。 8. **质量保证**:第六条保证了产品的质保期和保修范围,明确了因制造问题导致的缺陷如何...

    钢材购销合同范本_材购销合同模板.docx

    在这个例子中,签订时间为XX年07月21日,地点未具体给出,合同编号也未详述。 2. **供需关系**:甲方(购买方)同意在乙方(销售方)供应螺纹钢、盘螺、线材等建筑用钢材的情况下,优先从乙方采购。如果甲方在无...

    6--方法确认申请书.doc

    4. **公章和签字**:文档中的公章和签字代表了责任和授权,这在IT项目管理和合同签署中也很常见。在数字化环境中,电子签名和数字证书被广泛使用,以确保文档的完整性和不可否认性。 5. **技术内容审查**:在申请书...

    建筑工程常用表格2021B 1014试验单位资质等级计量认证报审表.doc

    在表格中,填写了试验单位的基本信息,如单位名称——渭南市临渭区建设工程质量技术监督局,以及其计量认证证书编号——(2005)量认(渭)字(R0259)号,这表明该单位已经通过了计量认证,具备了进行相关检测工作的资格...

    消防工作证明(官方模板).pdf

    这份官方模板适用于那些需要验证其消防安全技术工作经验的人员,例如在报考相关职业资格证书时使用。以下是根据标签"技术"和部分内容详细阐述的相关知识点: 1. 消防安全技术工作年限:工作年限是评估个人专业技能...

    门窗制作订货单.doc

    5. **数字签名**:制作人和客户的签字部分在电子文档中可以理解为数字签名,虽然这里没有具体的数字证书,但在实际业务流程中,电子签名是一种常见的身份验证方式,用于确认文件的完整性和签署者的同意。 6. **通信...

    特种设备安装告知书.doc

    3. **安装单位与使用单位**:在这个例子中,安装单位是昌鹏建筑机械有限责任公司,使用单位是黔西南州兴达建筑安装工程。两者都需要在告知书上签字确认,表明各自对施工质量和安全的承诺。 4. **项目经理和技术负责...

    网站商城转让协议合同范本.docx

    合同范本中包含了具体的例子,如联通互联网业务的转让,详细说明了包括门市、网络设施和用户资源等在内的转让细节处理。这些实例使得合同内容更加具体化,便于买卖双方在实际操作中把握合同的各个要点。 总之,一份...

    自考《公证与律师制度》真题及答案.docx

    - 解析:对于未取得律师执业证书而冒充律师从事法律服务的行为,根据相关法律规定,由公安机关给予相应的行政处罚。 以上解析基于题目内容进行了详细解读和分析,旨在帮助读者更好地理解和掌握相关知识点。

    网管教程 从入门到精通软件篇.txt

    可用NSREX打开 Velvet Studio例子文件 ASF:Microsoft高级流媒体格式文件 ASM:汇编语言源文件,Pro/E装配文件 ASP:动态网页文件;ProComm Plus安装与连接脚本文件;Astound介绍文件 AST:Astound多媒体文件;...

Global site tag (gtag.js) - Google Analytics