当前位置: 代码网 > 服务器>网络>网络协议 > 项管让你在项目上以HTTPS协议访问,你能说你不会配吗?_创建trustmanager

项管让你在项目上以HTTPS协议访问,你能说你不会配吗?_创建trustmanager

2024年07月28日 网络协议 我要评论
HTTP协议是一种用于客户端和服务器之间通信的应用层协议。它是基于TCP/IP协议栈的,常用于万维网(World Wide Web)中的数据传输和通信。假设你要使用浏览器访问一个网站。当你输入该网站的URL并按下“Enter”键时,浏览器将向服务器发送一个HTTP请求。这个请求将包含一些元数据,例如请求类型(GET、POST等)、请求头(包括浏览器类型、支持的语言等)以及任何请求体(例如表单数据)。服务器收到这个请求后,将查找请求的资源,并将该资源返回给浏览器。服务器将使用HTTP响应来传输该资源。
import java.io.bufferedreader;

import java.io.inputstreamreader;

import java.net.url;

import javax.net.ssl.httpsurlconnection;

public class httpsexample {

public static void main(string[] args) throws exception {

url url = new url("https://www.example.com");

httpsurlconnection con = (httpsurlconnection)url.openconnection();

bufferedreader br = new bufferedreader(new inputstreamreader(con.getinputstream()));

string input;

while ((input = br.readline()) != null) {

system.out.println(input);

}

br.close();

}

}

这个示例代码演示了如何使用java从https连接读取数据。它使用java的httpsurlconnection类建立与远程服务器的安全连接,并使用inputstreamreaderbufferedreader从连接读取数据。该示例还捕获了异常,以确保任何错误都得到适当处理。

二 . 什么是http协议

下面是http协议的一个简单例子:

假设你要使用浏览器访问一个网站。当你输入该网站的url并按下“enter”键时,浏览器将向服务器发送一个http请求。这个请求将包含一些元数据,例如请求类型(get、post等)、请求头(包括浏览器类型、支持的语言等)以及任何请求体(例如表单数据)。

服务器收到这个请求后,将查找请求的资源,并将该资源返回给浏览器。

服务器将使用http响应来传输该资源。响应将包含一些元数据,例如响应代码(例如200表示成功、404表示找不到资源等)、响应头(例如响应的mime类型)以及响应体(例如网页html)。

下面是一个代码案例,展示如何使用java发送http请求和处理http响应:

import java.net.\*;

import java.io.\*;

public class httpexample {

public static void main(string[] args) {

try {

url url = new url("https://www.example.com");

httpurlconnection con = (httpurlconnection) url.openconnection();

con.setrequestmethod("get");

con.setrequestproperty("user-agent", "mozilla/5.0");

int responsecode = con.getresponsecode();

system.out.println("response code: " + responsecode);

bufferedreader in = new bufferedreader(new inputstreamreader(con.getinputstream()));

string inputline;

stringbuffer response = new stringbuffer();

while ((inputline = in.readline()) != null) {

response.append(inputline);

}

in.close();

system.out.println(response.tostring());

} catch (exception e) {

system.out.println("exception: " + e);

}

}

}

该代码使用java的urlconnection类发送http get请求。在请求头中设置了user-agent,该请求头告诉服务器使用的浏览器类型和版本信息。然后,代码读取http响应,将其存储在stringbuffer对象中,并将其打印到控制台上。

总之,http协议是网络中最重要的协议之一,它使得web应用程序能够进行数据传输和通信。java作为一种流行的编程语言,提供了许多类和库,可以轻松地使用http协议进行通信。

三 . https协议和http协议的区别

http协议的数据传输是明文的,数据包可以被截获和篡改,不安全。而https协议通过加密传输保障数据的安全性,使得数据包不会被窃取、篡改、劫持等攻击,相对较为安全。

比如:使用https访问网银网站,可以保障用户的交易数据不被盗取。

http协议使用tcp/ip连接,一次连接只能进行一次请求和响应,连接断开后需要重新连接。而https协议除了建立tcp/ip连接之外,还要进行ssl/tls握手过程,建立安全通道,因此连接过程相对较慢。

接下来是一个使用java发送http请求的代码案例,代码如下所示:

import java.net.\*;

import java.io.\*;

public class httpclient {

public static void main(string[] args) {

try {

url url = new url("http://www.example.com/");

httpurlconnection conn = (httpurlconnection) url.openconnection();

conn.setrequestmethod("get");

bufferedreader rd = new bufferedreader(new inputstreamreader(conn.getinputstream()));

string line;

while ((line = rd.readline()) != null) {

system.out.println(line);

}

rd.close();

} catch (exception e) {

e.printstacktrace();

}

}

}

接下来是一个使用java发送https请求的代码案例,代码如下所示:

import java.net.\*;

import java.io.\*;

import javax.net.ssl.httpsurlconnection;

import javax.net.ssl.sslcontext;

import javax.net.ssl.trustmanager;

import javax.net.ssl.x509trustmanager;

import java.security.cert.x509certificate;

public class httpsclient {

public static void main(string[] args) {

try {

sslcontext sslcontext = sslcontext.getinstance("tls");

sslcontext.init(null, new trustmanager[] { new x509trustmanager() {

public void checkclienttrusted(x509certificate[] chain, string authtype) {}

public void checkservertrusted(x509certificate[] chain, string authtype) {}

public x509certificate[] getacceptedissuers() { return new x509certificate[0]; }

} }, new java.security.securerandom());

url url = new url("https://www.example.com/");

httpsurlconnection conn = (httpsurlconnection) url.openconnection();

conn.setsslsocketfactory(sslcontext.getsocketfactory());

conn.setrequestmethod("get");

bufferedreader rd = new bufferedreader(new inputstreamreader(conn.getinputstream()));

string line;

while ((line = rd.readline()) != null) {

system.out.println(line);

}

rd.close();

} catch (exception e) {

e.printstacktrace();

}

}

}

可以看出,发送http请求和https请求的代码非常相似,主要区别在于使用的是httpurlconnection还是httpsurlconnection,以及需要进行sslcontext初始化和设置sslsocketfactory等操作。

四. 生成https协议的方式

生成https协议的方式需要使用java的ssl库,以下是一个基本的代码案例:

import javax.net.ssl.httpsurlconnection;

import javax.net.ssl.sslcontext;

import javax.net.ssl.trustmanagerfactory;

import java.io.bufferedreader;

import java.io.ioexception;

import java.io.inputstreamreader;

import java.net.url;

import java.security.keystore;

public class httpsexample {

public static void main(string[] args) throws exception {

// load the truststore

keystore truststore = keystore.getinstance(keystore.getdefaulttype());

truststore.load(null, null);

// create a trustmanager that trusts the ssl certificates in the truststore

trustmanagerfactory trustmanagerfactory = trustmanagerfactory.getinstance(trustmanagerfactory.getdefaultalgorithm());

trustmanagerfactory.init(truststore);

// create an sslcontext that uses the trustmanager

sslcontext sslcontext = sslcontext.getinstance("tls");

sslcontext.init(null, trustmanagerfactory.gettrustmanagers(), null);

// set the default ssl context

httpsurlconnection.setdefaultsslsocketfactory(sslcontext.getsocketfactory());

// make an https request

url url = new url("https://www.example.com");

httpsurlconnection connection = (httpsurlconnection) url.openconnection();

bufferedreader reader = new bufferedreader(new inputstreamreader(connection.getinputstream()));

string line;

while ((line = reader.readline()) != null) {

system.out.println(line);

}

reader.close();

}

}

在这个例子中,我们首先加载了一个空的truststore,然后创建了一个trustmanagerfactory,使用它来创建一个sslcontext,这个sslcontext将使用trustmanager来验证服务器的ssl证书。我们设置了默认的ssl上下文,然后使用httpsurlconnection发送了一个https请求并读取了响应。

请注意,这个例子中的trustmanager只是信任所有的ssl证书。在生产环境中,您应该使用一个更安全的trustmanager来验证服务器的ssl证书。

好啦!关于https协议的一些基本我们就了解到这里啦,接下来就是咱们今天的重头戏啦!

给大家总结下如何在项目上配置https协议访问

五. 如何在项目上配置https协议访问

要配置https协议访问,需要以下步骤:

接下来就是一些具体的步骤,给大家结合代码示例
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里p7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新


图片转存中…(img-gq297dlz-1714224499955)]
[外链图片转存中…(img-voaxwjjt-1714224499956)]
[外链图片转存中…(img-oct7kcjs-1714224499957)]
[外链图片转存中…(img-zpbs11aa-1714224499957)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com