Tag: openssl

使用java的交互式命令Runtime.getRunTime.exec()

如何使用Runtime.getRunTime.exec()发送和接收多个输入。 例如,如果我想运行诸如openSSL之类的东西来生成csr,它会询问诸如州,城市,公用名等内容。 Process p = Runtime.getRuntime().exec(cmd); OutputStream out = p.getOutputStream(); //print stuff p.getInputStream(); //Now i want to send some inputs out.write(“test”.getBytes()); //flush and close??? don’t know what to do here //print what ever is returned //Now i want to send some more inputs out.write(“test2”.getBytes()); //print what ever is returned.. and so on until this is […]

以PEM格式转换私钥

我用Java代码创建了一个自签名证书并添加到KeyStore中。 现在,我想将创建的私钥和证书导出为PEM格式的文​​件。 没有任何第三方库,是否有可能实现这一目标? 下面是我用于创建自签名证书的代码。 public void createSelfSignedSSLCertificate() { try { final CertAndKeyGen keypair = new CertAndKeyGen(“RSA”, “SHA1WithRSA”, null); final X500Name x500Name = new X500Name(commonName, organizationalUnit, organization, city, state, country); keypair.generate(keysize); final PrivateKey privKey = keypair.getPrivateKey(); final X509Certificate[] chain = new X509Certificate[1]; chain[0] = keypair.getSelfCertificate(x500Name, new Date(), validity * 24 * 60 * 60); final String […]

从java中的.p7b文件中提取单个.cer证书

我是Cryptography的新手,所以如果您认为这是一个基本问题,请原谅 我有一个.p7b文件,我需要读取并提取单个公共证书,即.cer文件并将其存储在密钥库中。 我不必担心持久存在密钥存储区,因为已经有一个服务将.cer文件作为byte []接收并保存。 我想知道的是,我如何阅读.p7b并提取单个.cer文件? 我知道可以通过openSSL命令完成,但我需要在java中做同样的事情。 我还需要读取Issued By名称,因为它将用作持久保存证书的唯一键。 提前致谢

在充气城堡中生成ECDSA私钥会返回PUBLIC密钥

我试图使用充气城堡来生成ECDSA密钥。 代码似乎从Java的角度来看很好; 但是,当我转储文件并尝试validation数据时,OpenSSL不喜欢数据的格式。 经过一番研究,我认为充气城堡正在将私钥编码为公钥。 这是我的Java代码: public class Test { public static void main(String[] args) { Security.addProvider(new BouncyCastleProvider()); System.out.println(“Starting…”); String name = “prime256v1”; try { KeyPairGenerator kpg = KeyPairGenerator.getInstance(“ECDSA”, BouncyCastleProvider.PROVIDER_NAME); kpg.initialize(new ECGenParameterSpec(name)); KeyPair keyPair = kpg.generateKeyPair(); FileOutputStream writer = new FileOutputStream(“private.key”); writer.write(keyPair.getPrivate().getEncoded()); writer.close(); } catch(Exception e) { e.printStackTrace(); } } } private.key文件以有效的DER格式生成; 但是,当我运行以下命令来查看密钥的ASN.1结构时: $ openssl asn1parse […]

将密钥和SSL证书导入java密钥库

我有pem格式的证书文件和私钥文件。 是否可以使用Java代码将这些文件加载​​到Java密钥库中,使用JDK附带的默认库而不是第三方库。 当我尝试谷歌搜索时,我只能找到.der格式的文件,使用java代码导入到java密钥库中。 http://knowledge-oracle.blogspot.in/2009/02/import-private-key-and-certificate-in.html 是否可以通过java代码将pem格式的密钥和证书文件加载到java密钥库中,而无需转换为.der格式?

用盐打开Openssl AES 256 CBC Java Decrypt文件

我已经尝试了几天用java解密用openssl加密的消息。 使用以下命令加密消息: openssl enc -e -aes-256-cbc -kfile $ file.key -in toto -out toto.enc。 文件file.key包含256位的对称密钥。 在命令中没有指定salt,但文件以Salted__开头。 这是我编写的类,试图解密文件,但即使通过删除文件的16个字符即:Salted__ + salt加密,也无法获得任何内容。 我得到错误:线程“main”中的exceptionjavax.crypto.BadPaddingException:给定最终块未正确填充。 有人能帮帮我吗? 非常感谢你。 public class Java { private static SecretKey key = null; private static Cipher cipher = null; public static void main(String[] args) throws Exception { String filename = RESOURCES_DIR + “toto.enc”; byte[] key = Base64.decode(“2AxIw+/AzDBj83OILV9GDpOs+izDFJEhD6pve/IPsN9=”); […]

从文件导入证书时SSL握手失败

我正在创建一个HTTPS服务器并自己validation证书。 我有一个奇怪的错误。 当我生成证书并添加该密钥库时,我能够进行SSL握手。 keytool -genkey -keyalg rsa -alias mycert -keystore lig.keystore -storepass changeit -keypass changeit 当我使用keytool导入证书并将其添加到密钥库时,我收到SSH Handshake Failure错误。 keytool -noprompt -importcert -file certDer -alias mycert -keystore lig.keystore -storepass changeit -keypass changeit 确切地说,第一个是自签名证书。 第二个是第三方证书。 SSLHandshake适用于自签名证书,但不适用于第三方证书。 任何人都可以告诉为什么? HttpsNetServer.java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.security.KeyStore; import java.security.PrivateKey; import java.security.cert.Certificate; import […]

Java中的OpenSSL EVP_BytesToKey问题

我正在对一个API进行逆向工程,我发现它使用AES-256-CBC进行加密。 我还发现它使用EVP_BytesToKey来加密HTTP请求。 在我发现这个之后我测试了它但是我遇到了一些问题(可能是因为我没经验)。 我不知道在哪里放密码 这是需要被解密的内容: FP2xttTh/wm5Kr45Vh/PEvsdxgfL3NgxxMMk9hTkPfJd7vSJXTlhjiZlQajnBcMAVknANpv5FNCMRD+epDSOA2epKOzstSmhC0il2TlwgKqaT+97zomCMUCIfdaJYnLz5gBth1MIpxO30bx9zPg8cbOJcLnMmCo3vtSDCalgjHICf5FevI7DgrWnWC1U4wab0rx/rWhGFJ0sOW1ImDi9DkCy+guQZIrojbZxRlvGzv1mU/avP5hbKgWIheJpYQvvM12RyCNuVxjHK/oZ1mCQLVjvpED291lxsGTNHPUrc2NI7LCj/xOztjgsukpBP9K1nsUIgEyfVFUfTf5sh4QPccZnJ1bzKqPD 告诉我钥匙和解密方式的人也给了我这个 REMOVED

Java生成RSA密钥对并转换为PEM – 但OpenSSL函数PEM_read_bio_RSA_PUBKEY返回null

我使用以下代码生成RSA密钥对并将其转换为PEM。 但是当我使用OpenSSL函数时, PEM_read_bio_RSA_PUBKEY返回null。 Java代码: public static RSAKeyPair creatKeyPair(int keySize) throws Exception { KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM); keyGen.initialize(keySize, new SecureRandom()); return getRSAKeyPair(keyGen.genKeyPair()); } private static RSAKeyPair getRSAKeyPair(KeyPair keyPair) throws Exception { RSAKeyPair rsaKeyPair = new RSAKeyPair(); rsaKeyPair.PrivateKey = rsaKeyToPEMFormat(keyPair.getPrivate()); rsaKeyPair.PublicKey = rsaKeyToPEMFormat(keyPair.getPublic()); return rsaKeyPair; } private static String rsaKeyToPEMFormat(Key key){ StringWriter writer = new StringWriter(); //org.bouncycastle.openssl.PEMWriter […]

使用Bouncy Castle在Java中创建自定义X509 v3扩展

我已成功使用Bouncy Castle的X509v3CertificateBuilder Java类创建带有标准V3扩展的X509证书。 我现在正在尝试使用自定义扩展创建证书。 我可以使用addExtension(…)方法创建自定义扩展,但是,证书中的结果值不是我想要的。 例如,我希望在自定义OID 1.2.3.4下的证书中列出这些确切的八位字节:“00 00 00 00 FF FF FF FF”。 我尝试的所有内容都包含ASN1编码的八位字符串,最终为“04 08 00 00 00 00 FF FF FF FF”。 基本上,我想在Java中创建一个带有自定义扩展的证书,该扩展看起来与使用具有此配置的扩展文件使用OpenSSL创建时证书的外观相同: 1.2.3.4=DER:00:00:00:00:FF:FF:FF:FF 这可以用X509v3CertificateBuilder类以干净的方式完成吗? 下面是一段创建“不正确”值的代码片段。 // Raw value to place in cert for OID 1.2.3.4. byte[] bytearray = {0, 0, 0, 0, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF}; ASN1ObjectIdentifier asn1oid […]