JavaDemo——使用jks的https

这篇具有很好参考价值的文章主要介绍了JavaDemo——使用jks的https。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java使用https主要就是设置下sslContext,sslContext初始化需要密钥管理器和信任管理器,密钥管理器用于管理本地证书和私钥,信任管理器用于验证远程服务器的证书,这两种管理器都需要KeyStore初始化,两种管理器可以按需只设置一种或者都设置,KeyStore就用到jks文件和密钥库密码;

另外密钥管理器还需要一个密钥密码;

demo:

http服务端:

/**
 * 2023年7月19日上午10:43:42
 */
package testHttpSSL;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.security.KeyStore;
import java.util.concurrent.Executors;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpsConfigurator;
import com.sun.net.httpserver.HttpsServer;

/**
 * @author XWF
 *
 */
public class TestHttpServerWithSSL {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String storepass = "mystorepass";	//密钥库密码
		String keypass = storepass;	//密钥密码
		try {
			KeyStore keystore = KeyStore.getInstance("jks");
			keystore.load(new FileInputStream("./testhttp.jks"), storepass.toCharArray());
			SSLContext sslContext = SSLContext.getInstance("TLS");
			KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");	//管理本地证书和私钥
			kmf.init(keystore, keypass.toCharArray() );
			TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");	//验证远程服务器证书
			tmf.init(keystore);
			sslContext.init(kmf.getKeyManagers(), null, null);
			System.out.println(keystore);
			
			HttpsServer server = HttpsServer.create(new InetSocketAddress(4444), 0);
			server.setHttpsConfigurator(new HttpsConfigurator(sslContext));	//设置ssl
			server.createContext("/", new HttpHandler(){

				@Override
				public void handle(HttpExchange exchange) throws IOException {
					String exchangeUrl = exchange.getRequestURI().toString().substring(1);
					System.out.println("exchangeUrl=" + exchangeUrl);
					System.out.println("BODY:" + new String(exchange.getRequestBody().readAllBytes()));
					exchange.sendResponseHeaders(200, 0);
					try(OutputStream os = exchange.getResponseBody()){
						os.write("test return".getBytes());
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
				
			});
			server.setExecutor(Executors.newCachedThreadPool());
			server.start();
			System.out.println("https server start");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

http客户端:

/**
 * 2023年7月19日上午10:43:58
 */
package testHttpSSL;

import java.io.File;
import java.io.FileInputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpClient.Version;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
import java.security.KeyStore;
import java.time.Duration;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;

/**
 * @author XWF
 *
 */
public class TestHttpClientWithSSL {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String storepass = "mystorepass";
		String keypass = storepass;
		try {
			KeyStore keystore = KeyStore.getInstance("jks");
			keystore.load(new FileInputStream("./testhttp.jks"), storepass.toCharArray());
			SSLContext sslContext = SSLContext.getInstance("TLS");
			KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
			kmf.init(keystore, keypass.toCharArray() );
			TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
			tmf.init(keystore);
			sslContext.init(null, tmf.getTrustManagers(), null);
			System.out.println(keystore);
			
			HttpClient client = HttpClient.newBuilder()	//jdk11的httpclient
					.version(Version.HTTP_1_1)
					.sslContext(sslContext)	//设置ssl
					.build();
			HttpRequest request = HttpRequest.newBuilder()
					.uri(URI.create("https://127.0.0.1:4444/test?x=1&y=2"))
					.timeout(Duration.ofMillis(1000))
					.POST(BodyPublishers.ofByteArray("hello world".getBytes()))
					.build();
			HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
			System.out.println(response.statusCode());
			System.out.println(response.body().toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

运行结果:

客户端:

JavaDemo——使用jks的https,JavaDemos,https,jks

服务端:

JavaDemo——使用jks的https,JavaDemos,https,jks文章来源地址https://www.toymoban.com/news/detail-607073.html

到了这里,关于JavaDemo——使用jks的https的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jdk 中的 keytool 的使用,以及提取 jks 文件中的公钥和私钥

    这里暂时只需要知道如何使用就可以了。 首先是生成一个密钥, 解释一下这里的选项, -alias 密钥对的名称 -keypass 密钥密码 -validity 有效期,这里是以天为单位 -storepass 存储库的密码 -keystore 指定生成的密钥文件存放的位置,这里的  fanyfull.jks  表示的是当前目录下的  fan

    2024年02月08日
    浏览(61)
  • 双向SSL认证证书 生成 jks 步骤, java用jks 发送http请求 方法

    ) 1.证书的 cert.pem 文件 2.key文件 3.key的密钥 这里只显示 liunx 命令 ,windows 的同学可自查 这个命令会提示输入3次密码 ,第一次输入xxx.key的密码 , 第二次提示输入导出密码 自己设就行 ,这里用 changeit 注意: 第一次 不是自己设的 需要用 key文件的密钥 这里会用 上一步骤的导

    2024年02月06日
    浏览(43)
  • Android系统签名jks文件

    在android framework开发过程中,通常使用系统应用在验证某些功能,(系统功能权限大,可以通过反射获取hide接口,便于功能调试)。 一般做法,是将AndroidStudio打包的apk,使用系统签名,编译到系统,使其获取到system权限,验证功能。 但是这个过程比较复杂,流程繁琐,耗时

    2024年02月02日
    浏览(44)
  • Android Studio生成.jks文件

    字面意思可以理解为java的密钥库,是一个用来存放密钥和证书的仓库。而keytool就是密钥和证书的管理工具,它把key(密钥)和certificate(证书)存放在一个叫keystore的文件中。具体内容可以参考JKS_密钥对生成与读取方法。 1、打开android studio软件,点击上方Build - Generate Signe

    2024年02月02日
    浏览(38)
  • SpringBoot项目如何部署SSL证书 (JKS格式)

    1. 获取 SSL 证书和私钥 首先,你需要获取有效的 SSL 证书和私钥。SSL 证书是一种用于加密通信的数字证书,它可以通过购买商业 SSL 证书或使用免费的 Let’s Encrypt 证书获得。请确保你拥有证书文件和与之对应的私钥文件,这通常是以 .pem 和 .key 结尾的文件或者是jks格式的,本

    2024年02月07日
    浏览(91)
  • Android11.0 生成系统签名.jks文件并对Apk进行签名

    V2签名 对应用手动进行系统签名,需要platform.pk8,platform.x509.pem,signapk.jar这三个文件,应用的AndroidManifest.xml中需要添加 android:sharedUserId=“android.uid.system” ,然后输入以下命令就可得到签名后的apk文件: 如果你的应用 targetSdkVersion=30 ,在7.0以上的设备上安装不成功,会报以

    2024年02月07日
    浏览(60)
  • APP备案: AndroidStudio查看Keystore (.jks) MD5指纹、平台公钥 (Mac | Linux)

    目录 AndroidStudio Gradle查看MD5 如果Gradle里没有signingReport的话 Mac | Linux 查看证书公钥 Android APP备案时需要签名的一些信息。 AndroidStudio Gradle查看MD5 用keytool命令查看keystore文件,只显示SHA,没有MD5。 用 Gradle Tasks signingReport 即可在下面控制台显示MD5信息。 如果Gradle里没有signingR

    2024年02月04日
    浏览(39)
  • SSR使用HTTPS

    1.安装  npm i browser-sync 2. 再angular.json里配置 3.server.ts 修改function run()

    2024年02月12日
    浏览(37)
  • 如何免费使用https

            随着互联网安全的不断重视,国内外出现越来越多提供ssl免费证书的机构,今晚将使用Let\\\'s Encrypt的免费证书部署站点。服务器环境是centOS7.8,使用nginx作为web服务器。         简单介绍一下,Let\\\'s Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它由

    2024年02月05日
    浏览(30)
  • 使用 Wireshark 调试 HTTPS请求

    从我的这篇博客前端也需要深度了解HTTPS协议可以知道。 https 协议是通过 tls 加密套算法保护下的 http 协议;传统的 wireshark 抓包,可以清楚的看到 http 协议每次交互的报文和内容,但是对于加密的 https ,实际通信是基于非对称加密算法后,在对称算法加密通道内的报文。在

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包