Tag: openssl

使用PHP openssl_verify()函数来validationAndroid客户端APP创建的签名和数据

我读了关于openssl_verify()post 我想问一些与openssl_verify() 。 因为我的PHP代码无法validation从Java创建的签名… 对于服务器端,这是我的PHP代码 对于客户端Android APP,这里是代码的相关部分: // create public key and private key pair keyGen = KeyPairGenerator.getInstance(“DSA”); SecureRandom random = SecureRandom.getInstance(“SHA1PRNG”); keyGen.initialize(1024, random); // Generate the Pair of Keys The final step is to generate the key pair // and to store the keys in PrivateKey and PublicKey objects. pair = keyGen.generateKeyPair(); priv = […]

有效证书上的JDK 11 SSL错误(在以前的版本中工作)

以下代码在JDK 11中引发错误: HttpURLConnection con = (HttpURLConnection) new URL(“https://sis.redsys.es/sis/realizarPago”).openConnection(); con.setRequestMethod(“GET”); con.getResponseCode(); 错误是: javax.net.ssl.SSLHandshakeException: extension (10) should not be presented in server_hello at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128) at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:312) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:268) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:259) at java.base/sun.security.ssl.SSLExtensions.(SSLExtensions.java:71) at java.base/sun.security.ssl.ServerHello$ServerHelloMessage.(ServerHello.java:169) at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(ServerHello.java:860) at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:390) at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:445) at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422) at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:178) at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164) at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:877) at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:810) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:383) at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) 它在任何以前的JDK中工作(我在7,8,9和10中测试过)。 […]

SSLContext.getInstance(“TLS”)是否也支持TLS v1.1和TLS v1.2?

在我的java代码中,我正在使用命令创建一个SSL Context实例 SSLContext ctx = SSLContext.getInstance(“TLS”); 但在我的tomcat服务器中,我正在设置TLSv1.2并且我收到握手错误。 我们如何使用这种方法支持所有TLS协议,就像在cpp中一样,我们有SSLV23客户端方法,它将支持所有协议。

如何在Java中为现有私钥添加密码

假设我使用openssl创建了以前创建的私钥,但我决定不使用密码来保护它: —–BEGIN RSA PRIVATE KEY—– BASE64 ENCODED DATA —–END RSA PRIVATE KEY—– 但后来我意识到我想保护它。 我知道如何使用openssl保护它,但我需要用Java来实现它。 可能吗 ?

使用OpenSSL加密的方式与Java相同

我必须使用bash脚本加密字符串,就像我使用javax.crypto.Cipher加密一样。 在java我使用AES-256,密钥为“0123456789”。 但是当我使用openssl时我不得不将“0123456789”转换为hex,但结果与java不一样 echo “lun01” | openssl aes-256-cbc -e -a -K 7573746f726530313233343536373839 -iv 7573746f726530313233343536373839 dpMyN7L5HI8VZEs1biQJ7g == Java的: public class CryptUtil { public static final String DEFAULT_KEY = “0123456789”; private static CryptUtil instance; private String chiperKey; private CryptUtil(String chiperKey) { this.chiperKey = chiperKey; } public static CryptUtil getInstance() { if (null == instance) { instance = […]

AES密钥派生函数

我有一个使用openssl加密数据的bash脚本,以及解密结果的Java代码。 基于我之前的post ,我现在能够在openssl中输入密码,并将生成的密钥/ iv复制到Java中。 这依赖于在openssl中使用-naltalt选项。 我想删除该选项,并从openssl获取密码/ salt / iv并将其传递给JDK密钥派生函数。 这是我正在使用的openssl脚本: #!/bin/bash openssl enc -aes-128-cbc -in test -out test.enc -p 当我运行它并输入密码时,它会打印出以下内容。 salt=820E005048F1DF74 key=16023FBEB58DF4EB36229286419F4589 iv=DE46F8904224A0E86E8F8F08F03BCC1A 当我在Java中尝试相同的密码/ salt / iv时,我无法解密test.enc。 我在这篇文章中根据@erickson的答案尝试了Java代码。 这是片段。 SecretKeyFactory factory = SecretKeyFactory.getInstance(“PBKDF2WithHmacSHA1”); KeySpec spec = new PBEKeySpec(password, salt, 1024, 128); SecretKey tmp = factory.generateSecret(spec); SecretKey secret = new SecretKeySpec(tmp.getEncoded(), “AES”); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); […]

将Ruby加密代码转换为Java

我在ruby中有遗留代码,使用OpenSSL进行加密 但是,我想用Java翻译它,我迷失了。 到目前为止,我最大的阻截者正在研究如何基于此代码生成IV。 任何帮助将不胜感激 def func_enc(data, key) cipher = OpenSSL::Cipher::Cipher.new(“aes-256-cbc”) cipher.encrypt cipher.pkcs5_keyivgen(key) cipher.update(data) encrypted_data << cipher.final return encryptedData end 编辑 为了澄清,我想使用Java Crypto。 这是我到目前为止提出的代码: SecretKeyFactory factory = SecretKeyFactory.getInstance(“PBKDF2WithMD5And256AES-CBC”); KeySpec spec = new PBEKeySpec(“Password”.toCharArray(), null, 2048, 256); SecretKey tmp = factory.generateSecret(spec); SecretKey secret = new SecretKeySpec(tmp.getEncoded(), “AES”); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); cipher.init(Cipher.ENCRYPT_MODE, secret); AlgorithmParameters params = cipher.getParameters(); […]

新的主题哈希openssl算法不同

从Java Framework管理openssl证书时遇到了一个问题。 openssl x509 -subject_hash … 输出与Java框架在调用X509_NAME_hash()时返回的输出不同,请参见下文。 原因是openssl改变了计算SHA1的方式。 现在,不是像在MD5中那样将哈希基于主题的ASN.1 DER表示,而是首先计算CANONICAL表示,然后根据它计算ASN.1 DER,然后将其用作SHA1算法的输入。 NativeCrypto.java : // — X509_NAME ———————————————————– public static int X509_NAME_hash(X500Principal principal) { return X509_NAME_hash(principal, “SHA1”); } private static int X509_NAME_hash(X500Principal principal, String algorithm) { try { byte[] digest = MessageDigest.getInstance(algorithm).digest(principal.getEncoded()); return Memory.peekInt(digest, 0, ByteOrder.LITTLE_ENDIAN); } catch (NoSuchAlgorithmException e) { throw new AssertionError(e); } } […]

OpenSSL with Java

我必须在Java Web项目中使用OpenSSL,我对’OpenSSL’一无所知。 如何将OpenSSL与我的项目集成? 有什么好的基础教程可以学习吗?

使用或不使用OpenSSL将SSL .pem转换为.p12

我得到需要转换为.p12文件的外部.pem文件 – 我在此过程中添加了用户名和密码。 (我需要这样做才能使用第三方API。) 使用openssl ,命令是…… openssl pkcs12 -export -in xxxx.pem -inkey xxxx.pem -out xxx.p12 -passout pas:newpassword -name “newname” 我可以从终端会话运行它,它完美地工作。 但是,我需要经常这样做,并编写了一个Java类来处理这个和更多(我的应用程序主要是.jsp与Tomcat和Apache)。 当我尝试使用Runtime.exec从Java运行相同的命令时,我得到了可怕的“无法写入’随机状态’”错误( 使用OpenSSL“无法写入’随机状态’”是什么意思? )。 我假设不同之处在于,当我从Java运行时,用户不是“root”。 那么,是否有更好的方法使用Java库从pem转换为.p12而不是执行命令行程序(即openssl)? 否则,我想我需要在我的服务器上进行一些配置。 我在服务器上的任何地方都找不到任何.md文件。 唯一的openssl.cnf文件位于一个奇怪的目录( /etc/pki/tls )中。 我是否需要在其他地方创建一个新的openssl.cnf文件?