问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

环境 vs2005 c++ windows mobile6 从一个后缀名为keystore的文件中提取证书,通过此证书访问https的网页

发布网友 发布时间:2022-05-22 18:59

我来回答

2个回答

热心网友 时间:2023-10-06 05:49

可以用以下方法:
方法一:keytool -genkey -alias test -keyalg RSA -keystore c:/key.store
生成keyStore
RSA是一个既能用于数据加密也能用于数字签名的算法。
DSA(Digital Signature Algorithm,数字签名算法,用作数字签名标准的一部分),它是另一种公开密钥算法,它不能用作加密,只用作数字签名。DSA使用公开密钥,为接受者验证数据的完整性和数据发送者的身份。
提取证书:
通过keytool命令我们可以很轻松的提取证书.
证书包括主体信息,公钥.
keytool -export -alias 别名 -keystore 文件名 -file 证书名称

但是我们无法通过KEYTOOL工具来提取私钥的..我们只能通过java的KeyStore类getEntry() 或者getKey()来提取私钥.
读取keyStore文件:
char[] password = "password".toCharArray();
java.io.FileInputStream fis = new java.io.FileInputStream("c:/server/server_keystore");
// 从指定的输入流中加载此 KeyStore
ks.load(fis, password);
//keystore 中的每一项都用“别名”字符串标识。
//使用指定保护参数获取指定别名的 keystore Entry。
//KeyStore.PrivateKeyEntry 保存 PrivateKey 和相应证书链的 KeyStore 项。
方法1. KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry("keystore别名",new KeyStore.PasswordProtection(password));// 返回与给定别名相关联的密钥
方法2. PrivateKey key = (PrivateKey) ks.getKey("ser", password);
怎么来验证提取的私钥是否正确呢?(因为公钥私钥必须成对出现,我们可以通过证书提取去公钥,然后用公钥加密,使用刚刚获得的私钥解密)
提取证书的方法:
keytool -export -alias 别名 -keystore 文件名 -file 证书名称
//通过证书,获取公钥
CertificateFactory cf = CertificateFactory.getInstance("X.509");
FileInputStream in = new FileInputStream("C:\\server\\server.cer");
//生成一个证书对象并使用从输入流 inStream 中读取的数据对它进行初始化。
Certificate c = cf.generateCertificate(in);
PublicKey publicKey = c.getPublicKey();
//通过下面这段代码提取的私钥是否正确
String before = "asdf";
byte[] plainText = before.getBytes("UTF-8");
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// 用公钥进行加密,返回一个字节流
byte[] cipherText = cipher.doFinal(plainText);
cipher.init(Cipher.DECRYPT_MODE, myPrivateKey);
// 用私钥进行解密,返回一个字节流
byte[] newPlainText = cipher.doFinal(cipherText);
System.out.println(new String(newPlainText, "UTF-8"));
方法二: 下面是英文:
1.import java.io.File;
2.import java.io.FileInputStream;
3.import java.io.FileWriter;
4.import java.security.Key;
5.import java.security.KeyPair;
6.import java.security.KeyStore;
7.import java.security.KeyStoreException;
8.import java.security.NoSuchAlgorithmException;
9.import java.security.PrivateKey;
10.import java.security.PublicKey;
11.import java.security.UnrecoverableKeyException;
12.import java.security.cert.Certificate;
13.
14.import sun.misc.BASE64Encoder;
15.
16.public class ExportPrivateKey {
17. private File keystoreFile;
18. private String keyStoreType;
19. private char[] password;
20. private String alias;
21. private File exportedFile;
22.
23. public static KeyPair getPrivateKey(KeyStore keystore, String alias, char[] password) {
24. try {
25. Key key=keystore.getKey(alias,password);
26. if(key instanceof PrivateKey) {
27. Certificate cert=keystore.getCertificate(alias);
28. PublicKey publicKey=cert.getPublicKey();
29. return new KeyPair(publicKey,(PrivateKey)key);
30. }
31. } catch (UnrecoverableKeyException e) {
32. } catch (NoSuchAlgorithmException e) {
33. } catch (KeyStoreException e) {
34. }
35. return null;
36. }
37.
38. public void export() throws Exception{
39. KeyStore keystore=KeyStore.getInstance(keyStoreType);
40. BASE64Encoder encoder=new BASE64Encoder();
41. keystore.load(new FileInputStream(keystoreFile),password);
42. KeyPair keyPair=getPrivateKey(keystore,alias,password);
43. PrivateKey privateKey=keyPair.getPrivate();
44. String encoded=encoder.encode(privateKey.getEncoded());
45. FileWriter fw=new FileWriter(exportedFile);
46. fw.write(“—–BEGIN PRIVATE KEY—–\n“);
47. fw.write(encoded);
48. fw.write(“\n“);
49. fw.write(“—–END PRIVATE KEY—–”);
50. fw.close();
51. }
52.
53.
54. public static void main(String args[]) throws Exception{
55. ExportPrivateKey export=new ExportPrivateKey();
56. export.keystoreFile=new File(args[0]);
57. export.keyStoreType=args[1];
58. export.password=args[2].toCharArray();
59. export.alias=args[3];
60. export.exportedFile=new File(args[4]);
61. export.export();
62. }
63.}
或者:方法三:
证书用这个命令:
keytool -export -alias <alias> -flie <cert_file_name>
证书可是的扩展名用cer,然后在windows打开,可以改变证书的存储格式。
私钥好像不能导出来吧,不是很清楚。
配置ssl不需要导出秘钥和证书,tomcat直接可以使用keystore

热心网友 时间:2023-10-06 05:50

首先 不能使用java的类库. 除非你使用了JNI 但是与其这样, 不如直接使用JAVA

第二 访问https 可以使用OpenSSL, keystore文件中的证书只是个密钥. 提取出来后完全可以用一般的SSL方式进行post或者get连接

代码互联网上有的是...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
新装修怎样去除异味又快又有效,洋葱和土肥皂都试过了,都没用。 新装修的店面通风多久 新店装修通风需要多久? 新装修的店面多久多久没有异味 “新店装修后臭味能持续多长时间”_百 ... 我09年的国三柴油货车,到19年7月以后还能审吗? iebook 怎样让背景音乐从第一页开始放而不是封面开始 iebook超级精灵的背景音乐和页面插入音乐,可以分别控制吗? 用iebook做电子杂志的时候怎么从头到尾设同一首音乐 iebook支持导入多首音乐吗?可不可以对每页进行音乐设置? IEBOOK 往回翻页时上一页的背景音乐怎么样才能从头开始播放而不是接... 如何用iebook连续几页不间断播放同一首音乐? php rsa加密 已有明文和公钥 只需加密 使用 xampp部署代码,php代码中出现openssl_public_decrypt使用时报错,以前成功,文件代码没问题。 支付宝RSA验签失败,公钥在APP上用过没有问题,就是异步通知上用老显示FALSE,何解 php: openssl_public_encrypt()和openssl_private_encrypt()返回值总是FALSE 形而上学的真理观与辩证真理观的区别? 形而上学与辩证法的区别?高手请教 苹果是用苏打粉泡洗还是削皮最好?哪个最好安全又实惠? 吃苹果怎样清洗才安全? 吃苹果削皮不?削,皮上营养丰富;不削,皮上有食用蜡,怎么清洗? 扫盲怎样使用澳洲coles超市自动收银付款机 现在在超市的自动付款机上付款。可以刷什么卡付款? 关于荣耀V9手机屏幕 荣耀v9自动调节亮度有没有苹果那么灵敏,我只知道我盆友的一加5很灵敏 华为v9怎么恢复出厂系统 荣耀v9无法自动调节屏幕亮度,该怎么破 吃什么药可以防止脱发并可以生发 如何防止脱发掉发有什么好的药不? 怎样能防止脱发呢?吃什么或者用什么呢?(除了霸王防脱…) 吃芒果对人的身体有什么好处呢 有什么软件可以把两张照片重叠在一起,不要什么抠图啊,太麻烦了,有什么直接的 求一个基于openssl写的ecc曲线的源代码 一般的机箱加装散热风扇都是几厘米的? Ames什么意思 AmeS 中文是什么意思! No me ames大概什么意思 No me ames, que comprendo是什么意思 ames research center是什么意思 Ire ames是什么意思 组培育苗的仪器设备有哪些? he ames here on July 2nd是什么意思 No me escuches, si te digo &quot;no me ames&quot;什么意思 植物组培需要哪些培养基 AMEsim中Null的意思 植物细胞全能性的历史验证过程 AMESIM里面信号的单位NULL是什么意思? 世上有后悔药吗? amesim中的液元件设计库各模块都是什么意思 植物细胞的全能性是怎样的? 是谁说同一生物个体的每一个细胞都有全套基因组? 十二平均律有大吕、黄钟、蕤宾、姑洗还有八个是什么?