标签: jsse

JDK/JRE源代码与匹配的JSSE(SSL)源代码和匹配的可运行JDK/JRE?

我在哪里可以找到Java 6 JSSE/JCE源代码? 并问自己 如何获得具有匹配源的JRE/JDK?但我不知道其中任何一个都没有具体到足以得到我真正追求的答案,所以我将尝试更具体的问题版本.

基本上我试图解决的问题是我希望能够在Windows上使用我的Eclipse调试器并进入Java SSL类(JSSE)来帮助我调试SSL问题以及更好地理解SSL过程.BTW我熟悉(并使用)javax.net.debug = ssl | all系统属性来获取SSL跟踪,虽然这非常有用,但我仍然希望能够逐步完成那些讨厌的代码.

所以我认为我特别需要的是:

  1. 可执行的JRE/JDK实现(不想构建一个)...
  2. 这在我的Windows平台(XP)上运行...
  3. 这包括来源......
  4. 该源包括SSL"位"(JSSE等)......
  5. 理想情况下,SSL实现是Sun或OpenJDK版本.

我认为最接近的事情(如PW的回答StackOverflow:87106)是在OpenJDK 6 Source Release中找到的OpenJDK源openjdk-6-src-b12-28_aug_2008.tar.gz ,但我不确定是否有匹配的可执行JDK/JRE用于在Windows上运行.

java ssl jsse

11
推荐指数
2
解决办法
1万
查看次数

javax.net.ssl.SSLException:java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空

我正在寻找解析每天更新所述文件的XML文件 - 我遇到的唯一问题是他们使用自己的证书(https:// ..)并且我不能使用该特定URL,也不能是否有http:// ...链接可用.

URL url = new URL("https://...");
...
Document document = db.parse(url.openStream());
Run Code Online (Sandbox Code Playgroud)

此代码在运行我的测试时抛出以下异常:

javax.net.ssl.SSLException:java.lang.RuntimeException:意外错误:java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空

我已经看到了各种建议,涉及创建各种类来处理这种连接或个人服务器,以及将证书添加到密钥库,然后将该密钥库添加到Java项目,但我一直在无法做到这一点,我正在寻找一种稍微简单的方式让我去在线访问XML.

java ssl jsse truststore

11
推荐指数
2
解决办法
6万
查看次数

什么是SunX509,它可以与使用IbmX509的各方合作吗?

当我手动创建一个时KeyManager,其中一个步骤是这样的:

KeyManagerFactory.getInstance("SunX509")
Run Code Online (Sandbox Code Playgroud)

这对我需要指定"IbmX509"的IBM jre不起作用.
我的问题:

  1. 我读到这被称为"证书编码算法".那是什么意思?什么时候使用?
  2. 当客户端使用IBM算法并且服务器使用Sun算法时会发生什么?

谢谢,
多龙

java jsse ssl-certificate

11
推荐指数
1
解决办法
1万
查看次数

如何使用HttpsURLConnection覆盖Android发送到服务器的密码列表?

在TLS协商期间,客户端将支持的密码列表发送到服务器,服务器选择一个密码,然后开始加密.当我HttpsURLConnection用于通信时,我想更改Android发送到服务器的密码列表.

我知道我可以setSSLSocketFactoryHttpsURLConnection对象上使用它来设置它SSLSocketFactory.当我想要更改由SSLSocket返回的信任管理器等时,这非常有用SSLSocketFactory.

我知道一般这个密码组列表可以使用编辑SSLParameters对象,并将其传递到SSlsocketSSLEngine使用他们提供的方法的对象.

SSLSocketFactory似乎没有公开这样的方法!

我找不到一种方法来改变我传递给的创建SSLParameters的返回SSLSocket对象.SSLSocketFactoryHttpsURLConnection

该怎么办?

我想这也与Java有关,不仅仅是Android.也许有一种OO方式来做(例如扩展SSLSocketFactory并提供给它HttpsURLConnection?)

java ssl android jsse httpsurlconnection

11
推荐指数
2
解决办法
1万
查看次数

如何从RSA Privatekey.pem文件中获取java.security.PrivateKey对象?

我有一个RSA私钥文件(OCkey.pem).使用java我必须从这个文件中获取私钥.使用下面的openssl命令生成此密钥.注意:我无法在下面的openssl命令中进行任何更改.

openssl> req -newkey rsa:1024 -sha1 -keyout OCkey.pem -out OCreq.pem -subj "/C=country/L=city/O=OC/OU=myLab/CN=OCserverName/" -config req.conf
Run Code Online (Sandbox Code Playgroud)

证书如下所示.

////////////////////////////////////////////////// /////////
bash-3.00 $ less OCkey.pem
----- BEGIN RSA PRIVATE KEY -----
Proc-Type:4,ENCRYPTED
DEK-Info:DES-EDE3-CBC,EA1DBF8D142621BF

BYyZuqyqq9 + L0UT8UxwkDHX7P7YxpKugTXE8NCLQWhdS3EksMsv4xNQsZSVrJxE3
Ft9veWuk + PlFVQG2utZlWxTYsUVIJg4KF7EgCbyPbN1cyjsi9FMfmlPXQyCJ72rd
...
...
cBlG80PT4t27h01gcCFRCBGHxiidh5LAATkApZMSfe6BBv4hYjkCmg ==
----- END RSA私钥-----
///////////////////// /////////////////////////////////////////

以下就是我的尝试

byte[] privKeyBytes = new byte[(int)new File("C:/OCkey.pem").length()]; 
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(privKeyBytes));
Run Code Online (Sandbox Code Playgroud)

但得到

"java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:无效的密钥格式"

请帮忙.

java ssl jsse jca

9
推荐指数
1
解决办法
2万
查看次数

如何使用多个信任源初始化TrustManagerFactory?

我的应用程序有一个个人密钥库,其中包含用于本地网络的可信自签名证书 - 比如说mykeystore.jks.我希望能够使用已在本地配置的自签名证书连接到公共站点(例如google.com)以及本地网络中的站点.

这里的问题是,当我连接到https://google.com时,路径构建失败,因为设置我自己的密钥库会覆盖包含与JRE捆绑在一起的根CA的默认密钥库,报告异常

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Run Code Online (Sandbox Code Playgroud)

但是,如果我将CA证书导入我自己的密钥库(mykeystore.jks),它可以正常工作.有没有办法支持两者?

我有自己的TrustManger用于此目的,

public class CustomX509TrustManager implements X509TrustManager {

        X509TrustManager defaultTrustManager;

        public MyX509TrustManager(KeyStore keystore) {
                TrustManagerFactory trustMgrFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
                trustMgrFactory.init(keystore);
                TrustManager trustManagers[] = trustMgrFactory.getTrustManagers();
                for (int i = 0; i < trustManagers.length; i++) {
                    if (trustManagers[i] instanceof X509TrustManager) {
                        defaultTrustManager = (X509TrustManager) trustManagers[i];
                        return;
                    }
                }

        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            try …
Run Code Online (Sandbox Code Playgroud)

java ssl jsse x509

9
推荐指数
2
解决办法
2万
查看次数

如何配置TLS连接以保护它们免受怪异攻击(CVE 2015-0204)?

有关漏洞,请参阅https://freakattack.com/.

Mozilla wiki有一个包含密码套件推荐的页面:https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations

我将如何在Java上下文中应用这些或类似的建议(SSLContext,提供程序配置,Tomcat连接器等)?

java ssl jsse

9
推荐指数
1
解决办法
1万
查看次数

在同一JVM上设置多个信任库

我有一个在weblogic服务器上运行的Java应用程序.该应用程序有两个不同的模块,使用SSL连接到外部Web服务 - 比如模块A和模块B.

模块A - 基于Axis构建 - 使用信任库A Moudle B - 基于Spring-ws构建 - 使用信任库B.

模块A存在.正在介绍模块B.

我需要能够根据调用的模块在JVM中动态设置信任库.

由于某些限制,我没有选项 - 创建自定义密钥管理器. - 使用一个信任库

我尝试使用System.setProperty im Module B codebase来设置truststore.但是,仅当模块B首先被调用时才有效.例如 - 假设我重新启动JVM然后调用模块A - 它在JVM中设置它自己的信任库然后我调用模块B - 它失败 - 它没有在JVM中设置它自己的信任库,即使我已经使用过System.setProperty方法.

我错过了什么,或者只是System.setProperty不会覆盖现有的设置值.如果是这样,我的选择是什么.

java ssl jsse keystore truststore

8
推荐指数
1
解决办法
1万
查看次数

使用自签名证书和SSLEngine(JSSE)进行SSL握手

我的任务是实现一个可以在同一端口上处理SSL和非SSL消息的自定义/独立Java Web服务器.

我已经实现了一个NIO服务器,它非常适用于非SSL请求.我对SSL片段感到非常兴奋,并且可以使用一些指导.

这是我到目前为止所做的.

为了区分SSL和非SSL消息,我检查入站请求的第一个字节以查看它是否是SSL/TLS消息.例:

   byte a = read(buf);
   if (totalBytesRead==1 && (a>19 && a<25)){
       parseTLS(buf);
   }
Run Code Online (Sandbox Code Playgroud)

在parseTLS()方法中,我实例化一个SSLEngine,如下所示:

   java.security.KeyStore ks = java.security.KeyStore.getInstance("JKS");
   java.security.KeyStore ts = java.security.KeyStore.getInstance("JKS");

   ks.load(new java.io.FileInputStream(keyStoreFile), passphrase);
   ts.load(new java.io.FileInputStream(trustStoreFile), passphrase);

   KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
   kmf.init(ks, passphrase);

   TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
   tmf.init(ts);

   SSLContext sslc = SSLContext.getInstance("TLS");     
   sslc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);


   SSLEngine serverEngine = sslc.createSSLEngine();
   serverEngine.setUseClientMode(false);
   serverEngine.setEnableSessionCreation(true);
   serverEngine.setWantClientAuth(true);
Run Code Online (Sandbox Code Playgroud)

一旦SSLEngine被实例化,我使用unwrap/wrap方法使用直接来自官方JSSE Samples的代码处理入站数据:

   log("----");

   serverResult = serverEngine.unwrap(inNetData, inAppData);
   log("server unwrap: ", serverResult);
   runDelegatedTasks(serverResult, serverEngine);

   log("----");

   serverResult = serverEngine.wrap(outAppData, outNetData);
   log("server wrap: ", …
Run Code Online (Sandbox Code Playgroud)

java nio jsse sslengine

8
推荐指数
1
解决办法
9442
查看次数

如何使用DataStax Java驱动程序设置Cassandra客户端到节点加密?

我在我的Cassandra集群上设置了节点到节点加密.现在我想建立客户端到节点.根据此文档,它应该像获取客户端的SSL证书并将其导入每个节点的信任库一样简单.我还没有这样的证书,但这不是我的问题.

由于我的客户端使用DataStax Java驱动程序,似乎为了从客户端启用SSL,在构建时Cluster我应该使用该withSSL()方法来启用SSL.好的,但我还需要做什么?我不熟悉JSSE,所以我不知道还有什么必要.SSL通信是双向的,即驱动程序是否需要访问群集中每个节点的SSL证书?

ssl jsse cassandra datastax-java-driver cassandra-2.0

8
推荐指数
1
解决办法
7322
查看次数