标签: sslengine

制作SSLEngine在Android(4.4.2)上使用TLSv1.2?

伙计们,我希望有一些显而易见的东西让我失踪,我希望有人能够解决一些问题.我试图让TLSv1.2在SSL + NIO上下文中运行(使用AndroidAsync库),所以我试图通过SSLEngine启用它.我可以运行这样的代码:

        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(null, null, null);
        String[] protocols = sslContext.getSupportedSSLParameters().getProtocols();
        for (String protocol : protocols) {
            Timber.d("Context supported protocol: " + protocol);
        }

        SSLEngine engine = sslContext.createSSLEngine();
        String[] supportedProtocols = engine.getSupportedProtocols();
        for (String protocol : supportedProtocols) {
            Timber.d("Engine supported protocol: " + protocol);
        }
Run Code Online (Sandbox Code Playgroud)

我最终在logcat上看到了这个:

06-22 21:56:27.715    1117-1117/? D/XXX? Context supported protocol: SSLv3
06-22 21:56:27.715    1117-1117/? D/XXX? Context supported protocol: TLSv1
06-22 21:56:27.725    1117-1117/? D/XXX? Context supported protocol: TLSv1.1
06-22 21:56:27.725    1117-1117/? D/XXX? Context …
Run Code Online (Sandbox Code Playgroud)

android sslengine

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

SSL和SocketChannel

理想情况下,我只需要一个简单的SSLSocketChannel.

我已经有一个组件可以读取和写入普通的消息SocketChannel,但对于其中一些连接,我必须通过线路使用SSL; 但是,这些连接上的操作是相同的.

有没有人知道一个免费的SSLSocketChannel实现(使用适当的选择器)或类似的东西?我发现了这个,但选择器不接受它,因为它的供应商不是SUN.

我正在通过一个简单的对象将read_from/writing_to网络逻辑与网络数据的插入和检索分离,以便使用SSLEngine而不会生气,但考虑到我不知道的事实,实现它是非常棘手的SSL协议的内部......

java ssl nio socketchannel sslengine

13
推荐指数
2
解决办法
8897
查看次数

无效命令'SSLEngine',可能由服务器配置中未包含的模块拼写错误或定义

当为ssl/https连接配置apache2虚拟主机时,在添加配置并使用此命令启用配置"a2ensite pm.university.com.conf"后,我收到此错误"无效命令'SSLEngine',可能拼写错误或由模块定义包含在服务器配置中".我会回答我自己的问题.

apache ssl virtualhost sslengine

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

使用Bouncy Castle提供程序创建SSLContext实例

我坚持创建一个SSLContext(我想用它来实例化一个SSLEngine来处理通过java-nio的加密传输):

代码

String protocol = "TLSv1.2";
Provider provider = new BouncyCastleProvider();
Security.addProvider(provider);
sslContext = SSLContext.getInstance(protocol,provider.getName());
Run Code Online (Sandbox Code Playgroud)

抛出以下异常:

Exception in thread "main" java.lang.RuntimeException: java.security.NoSuchAlgorithmException: no such algorithm: SSL for provider BC
at org.bitmash.network.tcp.ssl.SslTransferFactory.<init>(SslTransferFactory.java:43)
at org.bitmash.network.http.HttpsServer.<init>(HttpsServer.java:19)
Run Code Online (Sandbox Code Playgroud)

我将Bouncy Castle的当前提供程序包'bcprov-jdk15on-150.jar'(我从这里获得)附加到应用程序类路径以及它的bootclasspath(通过VM-Option -Xbootclasspath/p),但都没有解决问题.我也尝试了不同的值protocol(即'SSL'和'TLSv1')而没有任何影响.

此外,我发现这里这里有类似问题的人.但与他们相比,我的目标(我正在使用)Java 7(或更高版本),但我仍然有这个问题.是这样 - 一般 - 甚至可以这样使用Bouncy Castle,或者我是否必须使用各自的API而不是oracle的NIO通过SSLEngine重写我的协议(这是我现在正在做的方式)?

非常感谢你们的帮助.

java ssl bouncycastle sslengine

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

如何在Java SSLEngine中设置自定义DH组以防止Logjam攻击?

对TLS的新Logjam攻击基于常见的DH组.此链接建议为每个服务器生成一个新的自定义2048位DH组.

如何在使用SSLEngine的Java服务器代码中设置自定义DH组?

ETA:如果我只使用短暂的DH密码套件,即使用DHE或ECDHE而不使用DH或ECDH的密码套件,我会安全吗?或者这是无关的?

java ssl sslengine

10
推荐指数
1
解决办法
7848
查看次数

使用自签名证书和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
查看次数

无法发送SSL关闭消息

我有一个线程,偶尔会在Message Hub上列出主题.但有一段时间,我得到了:无法发送SSL关闭消息.

有任何想法吗?

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(getConsumerConfiguration());
try {
    Map<String, List<PartitionInfo>> topics = consumer.listTopics();
    return new ArrayList<String>(topics.keySet());
} finally {
    if (consumer != null) {
        **consumer.close();**
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到了来自consumer.close的警告.

消费者的配置:

  • sasl.mechanism = PLAIN
  • security.protocol = SASL_SSL
  • group.id = consumer1
  • ssl.enabled.protocol = TLSv1.2
  • ssl.endpoint.identification.algorithm = HTTPS
  • ssl.protocol = TLSv1.2
  • sasl.jaas.config = org.apache.kafka.common.security.plain.PlainLoginModule required username ="USERNAME"password ="PASSWORD";

[WARN] 2018-01-25 20:12:23.204 [ClusterChannelMonitorTaskThread] org.apache.kafka.common.network.SslTransportLayer {} - 无法发送SSL关闭消息java.io.IOException:SSLEngine.wrap返回意外状态,预计CLOSED,收到OK.不会向同行发送密切消息.在org.apache.kafka.common.network.SslTransportLayer.close(SslTransportLayer.java:158)[kafka-clients-0.11.0.0.jar:?] at org.apache.kafka.common.utils.Utils.closeAll(Utils .java:663)[kafka-clients-0.11.0.0.jar:?] at org.apache.kafka.common.network.KafkaChannel.close(KafkaChannel.java:59)[kafka-clients-0.11.0.0.jar: ?] org.apache.kafka.common.network.Selector.doClose(Selector.java:582)[kafka-clients-0.11.0.0.jar:?] at org.apache.kafka.common.network.Selector.close (Selector.java:573)[kafka-clients-0.11.0.0.jar:?] at org.apache.kafka.common.network.Selector.close(Selector.java:539)[kafka-clients-0.11.0.0. jar:?] …

java sslengine apache-kafka kafka-consumer-api message-hub

8
推荐指数
0
解决办法
2421
查看次数

Java NIO和SSL

我正在使用java NIO编写服务器,我有几个问题,我无法找到答案.

首先,关于SSLEngine,如何NEED_TASK在分离的线程中正确处理?当我在单独的线程中调用任务时,他们完成了,但我不知道如何返回执行另一个握手操作.一种选择是从执行委派任务的线程调用该操作,但我想这不是这样做的方法.

另一个问题是interestOps()从不同的线程调用然后选择器线程.在尝试写入频道后没有写入所有数据后,我需要更改关键兴趣.我想过在ROX NIO教程中使用某种类型的更改队列,但我在另一个帖子中读到这不是最好的方法.

java ssl nio sslengine

7
推荐指数
1
解决办法
1112
查看次数

SSLEngine握手完成后打印解码数据

SSL握手完成后如何获取解码数据?

目前它似乎只解密了一些数据.

重现步骤

  1. 保存并运行此代码
  2. 转到https:// localhost:1500 - 您应该注意到请求的开头和结尾具有以下内容:

?GET ......#$?+ {??? u7Y ???

java ssl nio nio2 sslengine

7
推荐指数
0
解决办法
328
查看次数

javax.net.ssl.SSLException:SSLEngine 已关闭 SSLEngine 已在 webclient 中关闭(Springboot)

我在 springboot 应用程序中使用 webclient 来调用外部 Restful Web 服务。间歇性地出现此异常。

javax.net.ssl.SSLException: SSLEngine closed already SSLEngine closed already
Run Code Online (Sandbox Code Playgroud)

在收到此异常之前,我在日志中看到以下警告。

javax.net.ssl.SSLException:
   at io.netty.handler.ssl.SslHandler.wrap (SslHandler.java854)
   at io.netty.handler.ssl.SslHandler.wrapAndFlush (SslHandler.java811)
   at io.netty.handler.ssl.SslHandler.flush (SslHandler.java792)
   at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0 (AbstractChannelHandlerContext.java750)
   at io.netty.channel.AbstractChannelHandlerContext.invokeFlush (AbstractChannelHandlerContext.java742)
   at io.netty.channel.AbstractChannelHandlerContext.flush (AbstractChannelHandlerContext.java728)
   at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.flush (CombinedChannelDuplexHandler.java531)
   at io.netty.channel.ChannelOutboundHandlerAdapter.flush (ChannelOutboundHandlerAdapter.java125)
   at io.netty.channel.CombinedChannelDuplexHandler.flush (CombinedChannelDuplexHandler.java356)
   at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0 (AbstractChannelHandlerContext.java750)
   at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush (AbstractChannelHandlerContext.java765)
   at io.netty.channel.AbstractChannelHandlerContext.write (AbstractChannelHandlerContext.java790)
   at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush (AbstractChannelHandlerContext.java758)
   at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush (AbstractChannelHandlerContext.java808)
   at io.netty.channel.DefaultChannelPipeline.writeAndFlush (DefaultChannelPipeline.java1025)
   at io.netty.channel.AbstractChannel.writeAndFlush (AbstractChannel.java294)
   at reactor.netty.http.HttpOperations.lambda$send$0 (HttpOperations.java123)
   at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext (MonoFlatMap.java118)
   at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext (FluxMapFuseable.java121)
   at reactor.core.publisher.FluxContextStart$ContextStartSubscriber.onNext (FluxContextStart.java96)
   at reactor.core.publisher.Operators$ScalarSubscription.request (Operators.java2344) …
Run Code Online (Sandbox Code Playgroud)

sslengine sslexception spring-boot reactor-netty spring-webclient

7
推荐指数
1
解决办法
5565
查看次数