SSL通道能解决用户验证,指纹防篡改,数据加密。 用户验证通过双方的证书链来进行, 防篡改有证书的数字签名,数据加密则由SSL握手协商后的对称密码来对socket包进行加密。
SSL双向验证中,1)客户端需要提供自己的证书供服务器端进行验证。2)服务器端用客户端的证书中的公钥对握手数据加密,客户端需要用自己的密钥来解密握手数据。3)握手中需要产生随机数。 所以JDK中的SSLContext中的初始化方法init中需要这三个参数,其声明方法为
init(KeyManager[] km, TrustManager[] tm, SecureRandom random) ,
以下为样例,我们这里不打算从JDK的keytool建立的库中取证书,只是直接从一个已知的字符串中拿证书,所以直接实现一个简单的TrustManager和KeyManager:
sslcontext = SSLContext.getInstance("SSL"); sslcontext.init(new KeyManager[] {new SimpleKeyManager(privateKey, x509selfCertChain)} , new TrustManager[] {new SimpleTrustManager(x509TrustedCert)} , new SecureRandom ());
SimpleKeyManager实现了X509KeyManager接口,保存自己的证书内容和私钥。
SimpleTrustManager实现了TrustManager接口,保存了客户端信任的证书。
init后SSLContext初始化完成,此时可以调用SSLContext.getSocketFactory()取得SSLSocketFactory实例。然后用取到的factory来建立SSLSocket连接,当然,还需要提供Socket对象,host地址,host端口:
(SSLSocket) sslssFactory.createSocket(Socket s, String host, int port, boolean autoClose);
得到了SSLSocket之后的操作就跟普通socket一样了,socket.getOutputStream()
SSLSocket有几个选项设置SSL连接建立时的设置,如配置服务器模式或客户端模式,以下是较有用的几个:
SSLSocket.setEnabledCipherSuites( new String[]{"SSL_RSA_WITH_RC4_128_MD5" });
SSLSocket支持的密码套件。
SSLSocket.setEnableSessionCreation( true );
新的SSL可以此socket建立。
SSLSocket.setNeedClientAuth( true );
是否要求客户端身份验证,既校验证书。
SSLSocket.setUseClientMode( false );
握手时使用什么模式(客户端/服务器)。
相关推荐
2. **连接测试**:点击“连接”,如果一切正常,将会出现SSL证书验证对话框,显示的是之前通过`keytool`生成的证书信息。此时选择接受该证书,即可成功建立安全的FTP连接。 #### 三、总结与扩展 通过上述步骤,...
Bouncy Castle的强大加密功能可以帮助JavaPNS库安全地与APNS服务器建立连接,并进行加密的数据交换。 在实际应用中,开发者可能需要先配置好Apple的推送证书,然后使用JavaPNS库将这些证书加载到应用中。Bouncy ...
2. **连接建立**:JavaPNS库负责创建到APNs服务器的SSL连接,这需要提供正确的服务器地址和端口,以及之前提到的证书。 3. **通知构造**:开发者需要定义推送通知的内容,包括标题、正文、声音、附加数据等,并将...
2. 使用`SocketChannel`进行NIO操作时,通过`SSLSocketChannel`进行SSL连接也会创建`SSLSocketImpl`。 3. 对于基于HTTP的连接,如HTTPS,`HttpURLConnection`在建立安全连接时也会用到`SSLSocketImpl`。 要解决内存...
5. **SSL/TLS安全连接**:如果FTP服务器支持FTPS(FTP over SSL/TLS),则需要使用`javax.net.ssl.SSLSocket`代替`java.net.Socket`,并遵循SSL/TLS握手过程。 6. **被动模式(PASV)**:FTP有主动和被动两种模式。...
本文将详细介绍一种经过实战验证的远程Tomcat调试方法,适用于JDK1.8、Tomcat 9.0.8、IntelliJ IDEA 2023(Ultimate版)及Windows 10操作系统。该方法已经过验证,可以有效地避免常见的“Unable to connect to the ...
#### 二、建立私密连接的步骤 1. **环境准备**: - 操作系统:Windows 7 - Web服务器:Tomcat 7 - JDK版本:1.7 2. **使用JDK的Keytool生成证书**: - **生产服务器证书**: - 执行命令行命令,使用`...
开发者可以通过这个类建立连接,登录,切换工作目录,执行文件操作,并断开连接。 2. FTPFile:表示FTP服务器上的文件或目录,提供了文件属性,如大小、类型、修改日期等。 3. FTPSClient:除了FTP,此库还支持FTP...
### JNDI与目录服务详解 #### 一、JNDI概述 JNDI(Java Naming and Directory Interface)是Java平台...此外,还介绍了如何使用SASL和SSL与LDAP服务器建立安全连接,这对于在实际项目中应用JNDI技术具有重要意义。
对于需要使用SSL连接的JDK 1.2和1.3用户,需要在类路径中包含JSSE库。 Smack库中最为核心的类是XMPPConnection,它用于与XMPP服务器建立连接。创建一个基本的连接可以通过以下代码实现: ```java XMPPConnection ...
- 连接字符串的格式及参数设置。 - **2.4 处理异常**: - 在连接过程中可能遇到的常见异常。 - 异常处理策略。 #### 四、Applet数据库连接 - **3.1 Oracle驱动程序与JDK版本**: - Oracle JDBC驱动程序的不同...
对于JDK 1.2和1.3,如果需要SSL连接,需要额外添加JSSE库。 **建立连接** 通过`XMPPConnection`类创建到XMPP服务器的连接,例如: ```java XMPPConnection conn1 = new XMPPConnection("jabber.org"); ``` 如果...
一旦连接建立,服务器端会为每个客户端创建一个Socket,用于处理一对一的通信。 其次,为了实现多用户的并发聊天,我们需要使用多线程技术。当一个新的客户端连接到服务器时,服务器会在新的线程上处理该连接,这样...
3. 工作线程池(BossGroup 和 WorkerGroup): BossGroup 处理新进来的连接,WorkerGroup 处理已建立连接上的读写事件。 二、Netty 的 ByteBuf 1. ByteBuf 是 Netty 提供的缓冲区,替代了 JDK 的 ByteBuffer。ByteBuf...
然而,需要注意的是,如果在JDK 1.7以上的版本中使用这个库,可能会遇到一些方法的变更。由于Java的版本更新,某些API可能已经过时或者被移除,因此在使用时需要查阅最新的API文档以确保兼容性。Apache Commons Net...
3. **配置连接工厂**:连接工厂决定了客户端如何与JMS服务器建立连接。在WebLogic中,可以通过指定JNDI名称、连接池大小等参数来配置连接工厂,以满足不同的性能和可靠性需求。 4. **定义目的地**:根据应用场景...
值得注意的是,对于希望使用SSL加密连接的开发者,需确保JSSE库位于类路径中,尤其是在JDK1.2和1.3环境下。 #### 建立连接 `XMPPConnection`类是与XMPP服务器建立通信的核心。对于需要SSL安全连接的情况,`...
4. **JDBC API的使用**:JDBC API提供了`Connection`、`Statement`、`PreparedStatement`、`CallableStatement`和`ResultSet`等接口,用于建立数据库连接、执行SQL语句和获取结果。 5. **事务管理**:JDBC支持事务...
2. **事件驱动**:MINA基于事件驱动的设计,通过监听器接口实现对网络事件的响应,如连接建立、数据读写、连接关闭等,使得代码更简洁,易于维护。 3. **协议无关**:MINA提供了一层抽象,使得开发者可以方便地支持...