写道 通过网络给的资料,自己整理一些,很多都是转载,希望共同学习。
HTTPS简介:HTTPS就是一种安全协议,实际上应用了Netscape的安全套接字层(SSL)作为HTTP应用层的子层。
主要作用可以分为两种:
一种是建立一个信息安全通道,来保证数据传输的安全。
另一种就是确认网站的真实性。
HTTPS和HTTP的区别:
一、https协议需要到CA机构申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行
加密传输、身份认证的网络协议,比http协议安全。
SSL介绍:
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
SSL协议可分为两层:
1、SSL记录协议(SSL Record Protocol):
它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、
加密等基本功能的支持。
2、SSL握手协议(SSL Handshake Protocol):
它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、
协商加密算法、交换加密密钥等。
SSL协议主要有哪些作用?
1)认证用户和服务器,确保数据发送到正确的客户机和服务器
2)加密数据以防止数据中途被窃取
3)维护数据的完整性,确保数据在传输过程中不被改变。
SSL协议的工作流程:太复杂了,这里省略。
主要有2个阶段:
主要作用可以分为两种:
一种是建立一个信息安全通道,来保证数据传输的安全。
另一种就是确认网站的真实性。
HTTPS和HTTP的区别:
一、https协议需要到CA机构申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行
加密传输、身份认证的网络协议,比http协议安全。
SSL介绍:
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
SSL协议可分为两层:
1、SSL记录协议(SSL Record Protocol):
它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、
加密等基本功能的支持。
2、SSL握手协议(SSL Handshake Protocol):
它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、
协商加密算法、交换加密密钥等。
SSL协议主要有哪些作用?
1)认证用户和服务器,确保数据发送到正确的客户机和服务器
2)加密数据以防止数据中途被窃取
3)维护数据的完整性,确保数据在传输过程中不被改变。
SSL协议的工作流程:太复杂了,这里省略。
主要有2个阶段:
写道
Java 操作ssl socket的小例子
步骤:
keytool证书与密钥管理
1)创建服务端密钥库
>keytool -genkey -keystore E:\serverkey.jks -keyalg rsa -alias ssl1 -validity 700
上述命令中:
-genkey 生成密钥对
-keystore 指定密码仓库的文件地址
-keyalg 密钥所使用的算法
-alias 密钥别名..使用密钥时是使用此别名来区分的
-validity 密钥有效期(天)..从当前系统时间开始计算
该命令成功后会要求输入密码仓库的密码..例如xiawenquan
然后是输入你的个人信息..等等。最后在E盘生成一个serverkey.jks证书
2)将服务端的公钥导出成证书
>keytool -export -alias ssl1 -file e:\ssl1.cer -keystore e:\serverkey.jks
-export 导出的意思
导出成功后就得到了ssl1.cer这一份证书了..然后就是要将这一份证书分发给客户端..客户端有了该证书后就能与服务端建立安全连接了
3)生成客户端的密钥仓库
keytool -genkey -keystore e:\clientkey.jks -keyalg rsa -alias ssl1 -validity 700
4)将ssl1.cer导入到客户端的密钥仓库里
>keytool -import -file e:\ssl1.cer -keystore e:\clientkey.jks
上述命令成功后会要求输入客户端密钥仓库的密码..,比如:xiawenquan
成功后在每次要访问服务端之前还要将该证书添加到受信域中..系统会自动从受信域中检查可用的证书来完成SSL连接通讯..
步骤:
keytool证书与密钥管理
1)创建服务端密钥库
>keytool -genkey -keystore E:\serverkey.jks -keyalg rsa -alias ssl1 -validity 700
上述命令中:
-genkey 生成密钥对
-keystore 指定密码仓库的文件地址
-keyalg 密钥所使用的算法
-alias 密钥别名..使用密钥时是使用此别名来区分的
-validity 密钥有效期(天)..从当前系统时间开始计算
该命令成功后会要求输入密码仓库的密码..例如xiawenquan
然后是输入你的个人信息..等等。最后在E盘生成一个serverkey.jks证书
2)将服务端的公钥导出成证书
>keytool -export -alias ssl1 -file e:\ssl1.cer -keystore e:\serverkey.jks
-export 导出的意思
导出成功后就得到了ssl1.cer这一份证书了..然后就是要将这一份证书分发给客户端..客户端有了该证书后就能与服务端建立安全连接了
3)生成客户端的密钥仓库
keytool -genkey -keystore e:\clientkey.jks -keyalg rsa -alias ssl1 -validity 700
4)将ssl1.cer导入到客户端的密钥仓库里
>keytool -import -file e:\ssl1.cer -keystore e:\clientkey.jks
上述命令成功后会要求输入客户端密钥仓库的密码..,比如:xiawenquan
成功后在每次要访问服务端之前还要将该证书添加到受信域中..系统会自动从受信域中检查可用的证书来完成SSL连接通讯..
package com.xiawenquan.ssl; /** * Java sslSocket 聊天实例 *SSL Socket的服务器端 *@Author xiawenquan */ import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLServerSocketFactory; import javax.net.ssl.SSLSocket; public class SSLServer { public static void startSSLServer() throws IOException { final int port = 16666;// 监听端口 String keyFile = "E:\\serverkey.jks";// 密钥库文件 String keyFilePass = "xiawenuqan";// 密钥库的密码 String keyPass = "changeit";// 密钥别名的密码 SSLServerSocket sslsocket = null;// 安全连接套接字 KeyStore ks;// 密钥库 KeyManagerFactory kmf;// 密钥管理工厂 SSLContext sslc = null;// 安全连接方式 // 初始化安全连接的密钥 try { ks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream(keyFile), keyFilePass.toCharArray()); // 创建管理JKS密钥库的X.509密钥管理器 kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(ks, keyPass.toCharArray()); //构造SSL环境,指定SSL版本为3.0,也可以使用TLSv1,但是SSLv3更加常用 sslc = SSLContext.getInstance("SSLv3"); //初始化SSL环境。第二个参数是告诉JSSE使用的可信任证书的来源, //设置为null是从javax.net.ssl.trustStore中获得证书。第三个参数是JSSE生成的随机数, //这个参数将影响系统的安全性,设置为null是个好选择,可以保证JSSE的安全性。 sslc.init(kmf.getKeyManagers(), null, null); } catch (KeyManagementException ex) { } catch (KeyStoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (CertificateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnrecoverableKeyException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 用安全连接的工厂来创建安全连接套接字 SSLServerSocketFactory sslssf = sslc.getServerSocketFactory(); sslsocket = (SSLServerSocket) sslssf.createServerSocket();// 创建并进入监听 SocketAddress sa=new InetSocketAddress("localhost",port); sslsocket.bind(sa); System.out.println("Listening..."); SSLSocket ssocket = (SSLSocket) sslsocket.accept();// 接受客户端的连接 System.out.println("Server Connection OK~"); System.out.println("========================"); System.out.println(""); // 以下代码同socket通讯实例中的代码 BufferedReader socketIn = new BufferedReader(new InputStreamReader( ssocket.getInputStream())); BufferedReader userIn = new BufferedReader(new InputStreamReader( System.in)); PrintStream socketOut = new PrintStream(ssocket.getOutputStream()); String s; while (true) { System.out.println("Please wait client 's message.."); System.out.println(""); s = socketIn.readLine().trim(); if(s != null && !s.equals("")){ System.out.println("Client Message: " + s); if (s.trim().equals("BYE")){ break; } System.out.print("Server Message: "); } s = userIn.readLine().trim(); if(s != null && !s.equals("")){ socketOut.println(s); if (s.trim().equalsIgnoreCase("BYE")){ break; } } } socketIn.close(); socketOut.close(); userIn.close(); sslsocket.close(); } public static void main(String[] args) { try { startSSLServer(); } catch (Exception e) { System.out.println("Error: " + e); } } }
package com.xiawenquan.ssl; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; import javax.net.ssl.SSLSocketFactory; /** * Java sslSocket 聊天实例 * SSL Socket的客户端 * @author xiawenquan * */ public class SSLClient { static int port = 28080; public static void startSSLClient() throws IOException { int port = 16666;// 要连接的服务器端口 String serverAdd = "localhost";// 要连接的服务器地址192.168.1.39 try { System.setProperty("javax.net.ssl.trustStore", "E:\\serverkey.jks");// 设置可信任的密钥仓库 System.setProperty("javax.net.ssl.trustStorePassword", "xiawenuqan"); // 设置可信任的密钥仓库的密码 SSLSocketFactory sslsf = (SSLSocketFactory) SSLSocketFactory .getDefault();// 利用工厂来创建SSLSocket安全套接字 Socket csocket = sslsf.createSocket(serverAdd, port);// 创建并连接服务器 System.out.println("Client OK~"); System.out.println("==============="); System.out.println(""); // 以下代码同socket通讯实例中的代码 BufferedReader socketIn = new BufferedReader(new InputStreamReader( csocket.getInputStream()));// 接受到的信息 PrintStream socketOut = new PrintStream(csocket.getOutputStream());// 要发送的信息 BufferedReader userIn = new BufferedReader(new InputStreamReader( System.in));// 用户输入信息 String s; while (true) { System.out.print("Client Message: "); s = userIn.readLine().trim(); if(s != null && !s.equals("")){ socketOut.println(s); if (s.trim().equals("BYE")) break; else { System.out.println("Please wait Server Message.."); System.out.println(""); } s = socketIn.readLine(); System.out.println("Server Message: " + s); if (s.trim().equalsIgnoreCase("BYE")){ break; } } } socketIn.close(); socketOut.close(); userIn.close(); csocket.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { try { startSSLClient(); } catch (Exception e) { System.out.println("Error: " + e); } } }
相关推荐
Java sslSocket 聊天实例是使用 Java 的 SSL SOCKET 编程来实现安全聊天室功能的示例程序。 十二、用 COMMVIEW 工具截获浏览器访问支付宝的 TCP/IP 包 COMMVIEW 是一个网络嗅探工具,能够截获网络数据包。在本实例...
在Java编程中,`SSLSocket`是用于创建安全套接层(SSL)或传输层安全(TLS)连接的重要类,它提供了加密的数据传输服务,确保了网络通信的安全性。`SSLSocket`是Java标准库`javax.net.ssl`包的一部分,主要应用于...
创建SSLSocket实例需要SSLSocketFactory,可以通过SSLContext的getSocketFactory方法获取。然后调用factory的createSocket方法,指定服务器的IP地址和端口号。 5. **配置SSLContext** SSLContext是SSLSocket的...
Java SSL(Secure Socket Layer)套接字是一种用于在两个应用程序之间建立安全通信通道的协议,主要目的是为了确保数据传输的安全性。SSL通过使用加密技术来保护数据,防止未经授权的访问和篡改。在Java中,我们可以...
Java sslSocket聊天实例 通过`SSLSocket`可以构建安全的聊天应用,确保通信双方的身份认证和消息安全。 用COMMVIEW工具截获浏览器访问支付宝的TCP/IP包 网络嗅探工具如CommView可以捕获网络流量,但无法解密HTTPS...
Java Socket聊天室是一种基于Java编程语言实现的网络通信应用,主要利用了Socket编程接口来创建客户端和服务器端的连接,从而实现数据的双向传输。在这个系统中,用户可以通过客户端发送消息,服务器端接收到消息后...
Java的`javax.net.ssl.SSLSocket`类是用于创建SSL/TLS连接的,它继承自`Socket`,并在连接建立后自动进行加密。 5. **邮件构造**:在Java中,可以使用`javax.mail`和`javax.mail.internet`包来构造和格式化邮件。`...
`SSLSocket.getInputStream()`和`SSLSocket.getOutputStream()`分别提供加密的输入和输出流。 在实现安全登录时,服务器通常会要求客户端提供身份验证,这可能包括用户名和密码,或者客户端证书。服务器会检查这些...
- **服务器端**:服务器端的ServerSocket监听特定端口,接受客户端连接请求,为每个连接创建一个Socket实例。接收到客户端的消息后,将消息广播给所有在线的客户端。 - **多线程**:为了处理多个并发连接,服务器...
ServerSocket则用于监听客户端的连接请求,一旦有连接到来,就会创建一个新的Socket实例来处理这个连接。 3. **聊天程序**:聊天程序的核心功能包括用户注册、登录、创建聊天室、发送和接收消息等。在Java中,可以...
1. **创建SSLSocket实例** 首先,我们需要使用`SSLServerSocketFactory`和`SSLContext`来创建一个`SSLSocket`实例。这通常涉及到加载信任的证书、配置SSL上下文以及设置服务器和客户端的SSL参数。例如: ```java...
Java Socket聊天程序是一种基于Java语言实现的局域网内通信工具,主要利用Socket类进行网络数据传输,实现客户端与服务器端的实时交互。这个简单的聊天程序仅支持文字发送,不包含图片、音频或其他多媒体文件的传输...
本篇将深入探讨Java Socket编程及其在构建聊天应用中的应用。 首先,我们要了解TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保数据包按照顺序发送,并且在接收端按顺序接收,...
- 创建Socket实例,指定服务器的IP地址和端口号,进行连接。 - 同样,通过Socket对象获取输入流和输出流。 - 用户输入消息后,通过输出流向服务器发送,然后通过输入流读取服务器返回的消息。 为了实现多用户...
对于安全性,如果你的应用涉及到敏感信息的传输,应考虑使用SSL/TLS加密的Socket(即SSLSocket),以保证数据的安全性。 最后,Android系统有一些特殊的限制,比如需要在Manifest.xml中声明INTERNET权限,以及在...
Java中的SSL(Secure Socket Layer)和HTTPS(Hypertext Transfer Protocol Secure)协议是网络通信安全的重要组成部分,尤其在处理敏感信息如用户登录凭证、支付数据等时,它们提供了必要的加密和身份验证机制。...
当我们创建一个Socket实例时,实际上是建立了一个到远程主机的连接。 在实现EMAIL的发送过程中,我们首先需要了解SMTP(Simple Mail Transfer Protocol),它是电子邮件系统中用于传输邮件的标准协议。SMTP基于TCP/...