`

签字证书例子

阅读更多

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

    其次,协议设定了一个明确的期限,例如在这个例子中是从2018年4月9日至2019年4月8日。期满后,如果双方都同意,可以续约。在此期间,甲方有权使用乙方的证书材料,同时有义务按照约定支付乙方的聘用工资。 协议中...

    施工项目部管理人员资格报审表.doc

    在这个例子中,项目经理为李胜奎,拥有工程师职称和二级建造师证,专业方向为机电,已经缴纳了养老保险。他的教育背景是工业自动化专业,有相关项目管理经验。 技术负责人是项目的技术决策者,负责技术指导和质量...

    工程款支付报审表.pdf

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

    认 证 合 同 更 改 协 议 书.docx

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

    贷款担保承诺书.docx

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

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

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

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

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

    总监理工程师代表任命书借鉴.pdf

    任命书中详细列出了总监理工程师代表的基本信息,如姓名、性别、年龄和职称,以及他的注册证书号码,这些信息是证明其专业资格的重要依据。颜拥军将根据总监理工程师的授权,在指定的职责范围内代表总监理工程师进行...

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

    8. **实例应用**:协议范本中包含了两个具体的例子,展示了实际操作中的细节处理,如联通互联网业务的转让,包括门市、网络设施和用户资源等。 通过签订这样的协议,买卖双方能够清晰地了解各自的责任和权益,减少...

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

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

    二手车转让协议样本.doc

    4. **相关文件**:买方有权审验一系列文件,如机动车行驶证、机动车登记证书、税讫证明、年检证明、养路费缴费凭证等,确保车辆合法性。 5. **双方权利与义务**: - 卖方必须保证对车辆的所有权或处置权,并且车辆...

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

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

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

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

    门窗制作订货单.doc

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

    特种设备安装告知书.doc

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

Global site tag (gtag.js) - Google Analytics