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#中数据安全的基本处理以及综合使用的实际例程。...方便好用,里面是我做的多个例子的集合。
文档“监理审核意见签字范例.doc”提供了监理工程师在不同施工环节中审核并签署意见的典型例子,这些例子涵盖了从工程开始到结束的各个关键步骤。以下是对这些知识点的详细说明: 1. **工程开工报审表**:监理...
在这个例子中,评审形式是会议评审,这意味着有一组专家聚集在一起,听取项目团队的汇报,并对相关技术文件进行审查。 在简要技术说明和主要技术性能指标部分,通常会概述科研项目的创新点、核心技术以及实现的主要...
此文档标题提及的"(完整word版)授权方的软件著作权证书和相应授权关系证明",主要涉及到以下几个核心知识点: 1. **软件著作权**:根据《中华人民共和国著作权法》,软件开发者对其开发的软件享有著作权,包括但不...
在这个例子中,施工单位——南充市公信检测,被提名为进行相关检测工作的单位。 1. **企业营业执照**:这是企业合法运营的基础,表明检测单位已经通过了工商行政管理部门的注册,具有合法经营的身份。 2. **检测...
在《合同法》中,合同的成立不仅可以通过法人代表的签字确认,亦可通过盖章的方式生效。因此,公章的使用须严格遵守相关法律法规,保证其使用过程的合法性和规范性。 承诺书作为一种特殊的法律文件,是签署方对特定...
接下来,项目监理机构会出具工程款支付证书,再次确认同意支付的金额,并由总监理工程师签字并加盖执业印章,进一步增强了支付决定的正式性和权威性。这份证书同样是一式三份,分发给项目监理机构、建设单位和施工...
8. **认证机构**:在这个例子中,认证方是北京国建联信认证中心有限公司,它是一家提供产品认证、质量管理体系、环境管理体系和职业健康安全管理认证的专业机构,需遵守相关的国家法律法规和国际标准。 总结来说,...
在文中的例子中,担保期间为两年。 4. **担保金额**:担保金额是担保人承诺承担的最高还款额度,如果借款人未能偿还的贷款本息超出这个数额,担保人无需承担超出部分。 5. **财产证明**:担保人通常需要提供财产...
7. **验收与交割**:第五条描述了气垫船的检验和验收流程,包括试航和签署交船证书,证书的法律效力和风险转移的时间点。 8. **质量保证**:第六条保证了产品的质保期和保修范围,明确了因制造问题导致的缺陷如何...
在这个例子中,签订时间为XX年07月21日,地点未具体给出,合同编号也未详述。 2. **供需关系**:甲方(购买方)同意在乙方(销售方)供应螺纹钢、盘螺、线材等建筑用钢材的情况下,优先从乙方采购。如果甲方在无...
4. **公章和签字**:文档中的公章和签字代表了责任和授权,这在IT项目管理和合同签署中也很常见。在数字化环境中,电子签名和数字证书被广泛使用,以确保文档的完整性和不可否认性。 5. **技术内容审查**:在申请书...
在表格中,填写了试验单位的基本信息,如单位名称——渭南市临渭区建设工程质量技术监督局,以及其计量认证证书编号——(2005)量认(渭)字(R0259)号,这表明该单位已经通过了计量认证,具备了进行相关检测工作的资格...
这份官方模板适用于那些需要验证其消防安全技术工作经验的人员,例如在报考相关职业资格证书时使用。以下是根据标签"技术"和部分内容详细阐述的相关知识点: 1. 消防安全技术工作年限:工作年限是评估个人专业技能...
5. **数字签名**:制作人和客户的签字部分在电子文档中可以理解为数字签名,虽然这里没有具体的数字证书,但在实际业务流程中,电子签名是一种常见的身份验证方式,用于确认文件的完整性和签署者的同意。 6. **通信...
3. **安装单位与使用单位**:在这个例子中,安装单位是昌鹏建筑机械有限责任公司,使用单位是黔西南州兴达建筑安装工程。两者都需要在告知书上签字确认,表明各自对施工质量和安全的承诺。 4. **项目经理和技术负责...
合同范本中包含了具体的例子,如联通互联网业务的转让,详细说明了包括门市、网络设施和用户资源等在内的转让细节处理。这些实例使得合同内容更加具体化,便于买卖双方在实际操作中把握合同的各个要点。 总之,一份...
- 解析:对于未取得律师执业证书而冒充律师从事法律服务的行为,根据相关法律规定,由公安机关给予相应的行政处罚。 以上解析基于题目内容进行了详细解读和分析,旨在帮助读者更好地理解和掌握相关知识点。
可用NSREX打开 Velvet Studio例子文件 ASF:Microsoft高级流媒体格式文件 ASM:汇编语言源文件,Pro/E装配文件 ASP:动态网页文件;ProComm Plus安装与连接脚本文件;Astound介绍文件 AST:Astound多媒体文件;...