有个需求,说要在生成PDF文件时加上signature。
操作PDF容易,用:

<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.1.3</version>
</dependency>

加个signature可以用这个方法:

public static PdfStamper createSignature(final PdfReader reader, final OutputStream os, final char pdfVersion){..}

然后我用PdfStamper对象.getSignatureAppearance()获得一个PdfSignatureAppearance再给他setCrypto...

    /**
* Sets the cryptographic parameters.
* @param privKey the private key
* @param certChain the certificate chain
* @param crlList the certificate revocation list. It may be null
* @param filter the cryptographic filter type. It can be SELF_SIGNED, VERISIGN_SIGNED or WINCER_SIGNED
*/
public void setCrypto(PrivateKey privKey, Certificate[] certChain, CRL[] crlList, PdfName filter) {
this.privKey = privKey;
this.certChain = certChain;
this.crlList = crlList;
this.filter = filter;
}

参数列表的前两个东西我需要从KeyStore中得到....
KeyStore...java.security.KeyStore...

String mypassword = "hehe";
KeyStore ks_ = KeyStore.getInstance("JKS");
ks_.store(new FileOutputStream("papa.keystore"),mypassword.toCharArray());

但是却提示:
Exception in thread "main" java.security.KeyStoreException: Uninitialized keystore

那怎么才算initialized?

if (!initialized) {
throw new KeyStoreException("Uninitialized keystore");
}

我们需要一个文件!

public final void load(InputStream stream, char[] password) throws IOException,NoSuchAlgorithmException, CertificateException {
keyStoreSpi.engineLoad(stream, password);
initialized = true;
}

在此记录一下windows下生成keystore文件的方法...

先到我的JDK的bin目录下找keytool
输入keytool -genkey -alias hehe.keystore -keystore hehe.keystore,然后按提示走:

按提示再输入两次口令后发现生成了一个.keystore,可以拿来用了。

String PASSWORD = "papa";
KeyStore ks = KeyStore.getInstance("jks");
ks.load(new FileInputStream("hehe.keystore"), PASSWORD.toCharArray());
String alias = (String)ks.aliases().nextElement();
PrivateKey key = (PrivateKey)ks.getKey(alias, PASSWORD.toCharArray());
Certificate[] chain = ks.getCertificateChain(alias);

Java - 生成keystore的更多相关文章

  1. JAVA调用 keytool 生成keystore 和 cer 证书

    keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据: 密钥实体( ...

  2. java 调用 keytool 生成keystore 和 cer 证书

    keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据:密钥实体(K ...

  3. Java KeyStore 用命令生成keystore文件

    1.生成keyStore文件 在命令行下执行以下命令: Shell代码 收藏代码 keytool -genkey -validity 36000 -alias www.zlex.org -keyalg ...

  4. Java KeyStore 用命令生成keystore文件自己生成证书,简介

    1.生成keyStore文件 在命令行下执行以下命令: Shell代码 收藏代码 keytool -genkey -validity 36000 -alias www.zlex.org -keyalg ...

  5. 常用的Java Keytool Keystore命令

    Java keytool是密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务.它还允许用户储存他们的 ...

  6. 利用java代码生成keyStore

    在前面的章节中介绍了如何利用KeyTool工具生成keyStore:传送门. 但是很多时候,在javaWeb项目中,比如给每个用户加上独特的数字签名,那么我们需要在创建用户的时候,给其生成独一无二的k ...

  7. 如何生成KeyStore

    介绍如何生成keystore cmd下: 进入到jdk的bin目录,这样的话,android.keystore文件就会生成在这个目录下,签名的时候我们需要这个文件. C:\Program Files\ ...

  8. Android Studio 生成 keystore 签名文件

    Android Studio 生成 keystore 签名文件 常见 SSL 证书格式 : .DER .CER,文件是二进制格式,只保存证书,不保存私钥. .PEM,一般是文本格式,可保存证书,可保存 ...

  9. jdk生成keystore、tomcat配置https

    一.首先利用jdk自带工具keytool生成keystore,命令如下:keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysi ...

随机推荐

  1. JavaScript 用new创建对象的过程

       在JavaScript中创建自定义对象都需要用new运算符,那么创建对象的过程是什么样的呢? 例如现在有如下构造函数: function Person(name) { this.name = n ...

  2. Linux Shell 编程学习笔记

    1:Shell Script中if语句的条件部分要以分号来分隔 2:要注意条件测试部分中的空格.在方括号的两侧都有空格 3:echo "Hi, ${a}s" 单引号中的变量不会进行 ...

  3. 《Beginning Java 7》 - 2 - Cloning 克隆

    Cloning 分两类:影子克隆 shallow cloning 深度克隆 deep cloning * 调用 clone() 需要 implments Cloneable.此函数为 protecte ...

  4. Excel一对多查询(index+small+if)

    一.学习 一对多查询模式化数组公式: =INDEX(区域,SMALL(IF(条件,行号数组,4^8),ROW(A1))) 三键齐按(ctrl+shift+回车) 在具有多个符合条件的情况下,提取和匹配 ...

  5. maven+eclipse+ssm 环境搭建和启动

    该类工程环境搭建和启动方法 ------------------------------------------------------------------------------- 配置 jdk ...

  6. Elasticsearch C# NEST IndexMany Children

    foreach (IEnumerable<object> batch in objects.Batch(1000)) { var indexResponse = client.Bulk(s ...

  7. 解决You are using pip version 10.0.1, however version 18.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.

    pip install ...出现问题 直接输入python - pip install --upgrade pip就可以了

  8. 做point data的切面的时候的注意事项

    正确的顺序应该是: 先导入cell data,再转换为point data,再做切面.结果如下: 如果这里导入cell data以后先做了切面再转换为point data,结果就是这样的: 很明显中间 ...

  9. 关于如何爬虫妹子图网的源码分析 c#实现

    网上也出现一些抓取妹子图的python 代码,今天我们用c#实现爬虫过程. 请看我的网站: www.di81.com private void www_94xmn_Com(string url, st ...

  10. 【Template】Miller Rabin

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #i ...