Tag: pem

将.key和.pem文件导入jks文件并在Java / Spring中使用

我从服务团队获得了以下密钥/证书,通过SSL调用他们的API,我通过curl命令对其进行了validation。 1. QA.test.key 2. QA.test.pem CURL命令: curl –key QA.test.key –cert ./QA.test.pem -X POST –header “Content-Type: application/json” –header “Accept: application/json” -d ‘{“pan”:”1234567890123456″, “client”: ” Application Name “}’ https://test-qa.abc.com/tokenize 现在,要通过https在Java中调用API,我是否需要执行以下操作? 创建一个自签名的jks文件 将.key和.pem导入新的test.jks文件? 请执行下列操作 public class TestApp { final static String KEYSTORE_PASSWORD = “testing”; static { System.setProperty(“javax.net.ssl.trustStore”, “src/main/resources/test.jks”); System.setProperty(“javax.net.ssl.trustStorePassword”, KEYSTORE_PASSWORD); System.setProperty(“javax.net.ssl.keyStore”, “src/main/resources/test.jks”); System.setProperty(“javax.net.ssl.keyStorePassword”, KEYSTORE_PASSWORD); } public static void […]

Java如何使用私钥文件而不是PEM来解密?

使用Java和Bouncy Castle 1.52,我可以使用以下代码通过PEM证书加载私钥。 我还有一个PKCS8格式的private.key文件。 直接使用private.key文件而不是PEM的代码是什么? String keyPath = “C:\\RSA7\\privatenopass.pem”; BufferedReader br = new BufferedReader(new FileReader(keyPath)); PEMParser pp = new PEMParser(br); PEMKeyPair pemKeyPair = (PEMKeyPair) pp.readObject(); KeyPair kp = new JcaPEMKeyConverter().getKeyPair(pemKeyPair); pp.close(); cipher.init(Cipher.DECRYPT_MODE, kp.getPrivate());

Java证书客户端SSL:无法找到所请求目标的有效证书路径

我们需要客户端身份validation才能向我们的某些Web服务发送RESTful请求。 我已经通过密钥工具在我的本地mac os上安装了客户端证书(.pem)和密钥。 这些都不是自签名的。 openssl pkcs12 -export -name myservercert -in not_self_signed.crt -inkey server.key -out keystore.p12 …并转换为JKS格式 keytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias myservercert 我正在尝试构建一个Java客户端来进行身份validation。 这是我到目前为止所提出的: import java.io.FileInputStream; import java.security.KeyStore; import javax.net.ssl.SSLContext; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContexts; import org.apache.http.util.EntityUtils; public class TestClientCustomSSL { public […]

如何从PEM证书和密钥构建SSLSocketFactory而不转换为密钥库?

我获得了一个自签名客户端证书工具包,用于通过HTTPS访问服务器。 该套件包含以下PEM文件: client.crt(客户端证书) client.key(客户端私钥) ca.crt(CA证书) 解决该任务的一种方法是生成Java密钥库: 使用openssl将客户端证书和密钥转换为PKCS12密钥库 使用keytool将CA证书导入到商店 …然后使用以下代码构建SSLSocketFactory实例: InputStream stream = new ByteArrayInputStream(pksData); KeyStore keyStore = KeyStore.getInstance(“PKCS12”); keyStore.load(stream, password); KeyManagerFactory kmf = KeyManagerFactory.getInstance( KeyManagerFactory.getDefaultAlgorithm()); kmf.init(keyStore, password.toCharArray()); KeyManager[] keyManagers = kmf.getKeyManagers(); TrustManagerFactory tmfactory = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); tmfactory.init(keyStore); TrustManager[] trustManagers = tmfactory.getTrustManagers(); SSLContext sslContext = SSLContext.getInstance(“TLS”); sslContext.init(keyManagers, trustManagers, null); sslSocketFactory = sslContext.getSocketFactory(); …后来用于初始化http库。 因此,我们获得了一个KeyStore,然后在它的帮助下初始化KeyManagers和TrustManagers,最后我们用它们构建了SSLSocketFactory实例。 问题是 :有没有办法避免密钥库文件的创建,并以某种方式构建SSLSocketFactory,从PublicKey和Certificate实例开始(例如,可以使用bouncycastle的PemReader从PEM文件中获取)?

使用bouny castle正确创建带有中间证书的新证书

所以我的问题如下, 基本上我想使用充气城堡(jdk16版本1.46)创建证书链。 我对bouncy castle和java.security很新,所以如果我的方法可能完全错误,但无论如何这就是我所做的: 到目前为止,我能够创建一个自签名证书,我将其用作根证书。 这是使用以下代码完成的: //—–create CA certificate with key KeyPair caPair = Signing.generateKeyPair(“DSA”, 1024, null, null); 这基本上创建了密钥对,如果需要,两个空选项用于提供者和安全随机。 Map<ASN1ObjectIdentifier, Entry> caMap = new HashMap<ASN1ObjectIdentifier, Entry>(); caMap.put(X509Extensions.BasicConstraints, new AbstractMap.SimpleEntry(true, new BasicConstraints(true))); //——this creates the self signed certificate X509Certificate caCert = X509CertificateGenerator.generateX509Certificate(serial, “CN=CA”, “CN=CA”, start, end, “SHA1withDSA”, caPair.getPrivate(), caPair.getPublic(), null, caMap); 这将创建具有提供的属性的证书。 serial =简单地以毫秒为单位的当前时间 start =基本相同(可能有1或2毫秒的差异) […]

使用或不使用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文件?

如何使用JCA读取BouncyCastle私钥PEM文件?

在我们的一个应用程序中,使用BouncyCastle的PEMWriter存储私钥。 目前我正在调查是否可以摆脱BouncyCastle依赖,因为Java 7似乎拥有我们需要的一切。 唯一的问题是我无法读取存储在数据库中的私钥作为PEM编码的字符串(证书/公钥很好)。 如果我将私有密钥的PEM编码字符串从数据库保存到文件,我可以运行OpenSSL将密钥转换为PKCS#8格式,如下所示: openssl pkcs8 -topk8 -inform PEM -outform DER \ -in private_key.pem -out private_key.der -nocrypt 结果输出我可以base64编码,然后使用这个Java / JCA代码读取: byte[] privateKeyBytes = DatatypeConverter.parseBase64Binary(privateKeyDERcontents); PrivateKey prKey = KeyFactory.getInstance(“RSA”). generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes)); 这个私钥与预期存储的公钥匹配,即我可以从明文到密文和返回往返。 我的问题是:我能以某种方式直接读取原始PEM编码吗? 编辑 下面是一些使用BouncyCastle读取相关字符串的代码: if (Security.getProvider(“BC”) == null) { Security.addProvider(new BouncyCastleProvider()); } PEMReader pemReader = new PEMReader(new StringReader(privateKeyPEM)); KeyPair keyPair = (KeyPair) pemReader.readObject(); PrivateKey […]

如何将PEM编码的椭圆曲线公钥加载到Bouncy Castle?

我有一个PEM编码的Elliptic Curve公钥,我正在尝试加载到Bouncy Castle中,到目前为止我尝试的所有内容都失败了。 这是我正在尝试加载的密钥的示例: —–BEGIN PUBLIC KEY—– MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBhsFCcWY2GaiN1BjPEd1v+ESKO6/0 D0sUR4y1amHnOr3FZx6TdqdoSBqxownQrnAKGCwagGxUb7BWwPFgHqKQJHgBq+J7 F+6m5SKAEL1wS5pqya91N7oudF3yFW8oZRE4RQRdSLl3fV2aVXKwGDXciwhUhw8k x5OS4iZpMAY+LI4WVGU= —–END PUBLIC KEY—– 它由NodeJS Crypto模块生成,曲线名称为secp521r1。 它稍后由npm包密钥编码器编码到PEM中。 我已经在JavaScript(实际上是ClojureScript)中使用它来validation签名,现在我需要使用Javavalidation服务器上的签名(实际上是Clojure)。 我尝试从密钥中删除守卫,转换为byte []并创建X509EncodedKeySpec。 那没用。 它崩溃了: InvalidKeySpecException encoded key spec not recognised org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic (:-1) 我用来加载密钥的代码: KeyFactory. getInstance(“ECDSA”, “BC”). generatePublic(new X509EncodedKeySpec(publicKey.getBytes())) 以防万一,这是我的Clojure代码: (-> (KeyFactory/getInstance “ECDSA”) (.generatePublic (X509EncodedKeySpec. (.getBytes public-key)))) 我也尝试过PKCS8EncodedKeySpec,但是我收到了错误: InvalidKeySpecException key spec not recognised org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic (:-1) 我也在这里试过这个方法: https ://gist.github.com/wuyongzheng/0e2ed6d8a075153efcd3#file-ecdh_bc-java-L47-L50但是在运行decodePoint时我收到错误: […]

RestTemplate与pem证书

我有私钥和服务器证书的pem证书。 我可以使用curl执行它,一切正常。 curl -O -k –cert-type pem –cert mypem.pem url 但是我希望将它与java一起使用,最好是从Spring开始使用RestTemplate。

使用bouncycastle / spongycastle读取加密的私钥

我有一个密码保护,加密的RSA私钥,它是用PyCrypto(2.6.1)创建的,并根据他们的文档有以下格式: PrivateKeyInfo, PKCS#8 (DER SEQUENCE), PEM (RFC1423) ,见[ https: //www.dlitz.net/software/pycrypto/api/current/Crypto.PublicKey.RSA._RSAobj-class.html#exportKey] 。 如何使用Bouncycastle / Spongycastle解密此RSA密钥? 我已经搜索了Google很长一段时间,只得到了结果,这些结果要么不适用于版本1.50(因为PEMReader已被弃用并被删除),要么是PEMParser的例子似乎无法读取此格式。 顺便说一下:我错过了关于Bouncycastle的文件吗? 这是我加密的私钥的标题: —–BEGIN PRIVATE KEY—– Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,68949227DD8A502D xyz… 如果有人能帮助我,我真的很感激!