我正在用Java制作一个自定义的HTTP/1.1服务器实现。它在HTTP模式下工作正常,但我也想支持HTTPS。我还没有为服务器生成证书,但它至少应该尝试连接。我将协议和密码套件设置为与google.com(TLS 1.2,ECDHE_RSA,AES_128_GCM)相同的设置,因此我知道Chrome支持它们。Chrome中的HTTPS服务器“不支持的协议错误”

但是,当我尝试在Chrome中连接到https://localhost时,它会给出ERR_SSL_VERSION_OR_CIPHER_MISMATCH(本地主机使用不受支持的协议)错误。在Java方面,我得到了“没有共同的密码套件”错误。

Java代码:

public class Server {

private final String dir;

private final ServerSocket server;

private final SSLServerSocket sslServer;

public static String jarDir() {

String uri = ClassLoader.getSystemClassLoader().getResource(".").getPath();

try { return new File(URLDecoder.decode(uri,"UTF-8")).getPath()+File.separator; }

catch (Exception e) { return null; }

}

private static SSLContext createSSLContext(String cert, char[] pass) throws Exception {

/*//Load KeyStore in JKS format:

KeyStore keyStore = KeyStore.getInstance("jks");

keyStore.load(new FileInputStream(cert), pass);

//Create key manager:

KeyManagerFactory kmFactory = KeyManagerFactory.getInstance("SunX509");

kmFactory.init(keyStore, pass); KeyManager[] km = kmFactory.getKeyManagers();

//Create trust manager:

TrustManagerFactory tmFactory = TrustManagerFactory.getInstance("SunX509");

tmFactory.init(keyStore); TrustManager[] tm = tmFactory.getTrustManagers();

//Create SSLContext with protocol:

SSLContext ctx = SSLContext.getInstance("TLSv1.2");

ctx.init(km, tm, null); return ctx;*/

SSLContext ctx = SSLContext.getInstance("TLSv1.2");

ctx.init(null, null, null); return ctx;

}

Server(String localPath, int port) throws Exception {

this(localPath, port, 0);

}

//Server is being initialized with:

//new Server("root", 80, 443);

Server(String localPath, int port, int httpsPort) throws Exception {

dir = localPath; File fdir = new File(jarDir(), dir);

if(!fdir.isDirectory()) throw new Exception("No such directory '"+fdir.getAbsolutePath()+"'!");

//Init Server:

server = new ServerSocket(port);

if(httpsPort > 0) {

SSLContext ctx = createSSLContext("cert.jks", "pass".toCharArray());

sslServer = (SSLServerSocket)ctx.getServerSocketFactory().createServerSocket(httpsPort);

//TLS_DH_anon_WITH_AES_128_GCM_SHA256

sslServer.setEnabledCipherSuites(new String[]{"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"});

sslServer.setEnabledProtocols(new String[]{"TLSv1.2"});

//Also does not work, same error:

//sslServer.setEnabledCipherSuites(sslServer.getSupportedCipherSuites());

//sslServer.setEnabledProtocols(sslServer.getSupportedProtocols());

} else sslServer = null;

/*new Thread(() -> { while(true) try {

new HTTPSocket(server.accept(), this);

} catch(Exception e) { Main.err("HTTP Server Error",e); }}).start();*/

if(httpsPort > 0) new Thread(() -> { while(true) try {

new HTTPSocket(sslServer.accept(), this);

} catch(Exception e) { Main.err("HTTPS Server Error",e); }}).start();

}

/* ... Other Stuff ... */

}

编辑:我使用生成一个keytool -genkey -keyalg RSA -alias selfsigned -keystore cert.jks -storepass password -validity 360 -keysize 2048证书,但现在的Java抛出密钥库被篡改,或密码不正确错误。

2017-07-17

Pecacheu

+0

在代码中提供“密码”而不是“密码”作为密码。 –

+0

谢谢,使用“密码”工作。但是不确定为什么。 –

服务器协议失败,Chrome中的HTTPS服务器“不支持的协议错误”相关推荐

  1. 非零基础自学Golang 第18章 HTTP编程(下) 18.2 HTTP服务端 18.2.2 启动HTTP服务器 18.2.3 启动HTTPS服务器

    非零基础自学Golang 文章目录 非零基础自学Golang 第18章 HTTP编程(下) 18.2 HTTP服务端 18.2.2 启动HTTP服务器 18.2.3 启动HTTPS服务器 第18章 H ...

  2. 修改AD服务器时间,AD中权威时间服务器的配置

    在以往的工作当中,我们DC服务器WIN32TIME经常报错,找不到时间服务器,不能同步.为了消除这个烦人的错误,我这样处理之后,在没出现过报错. 1 内部时间服务器实现与外部时间服务器的同步 a. 单 ...

  3. 网络位置添加一个ftp服务器,win7网络中添加ftp服务器

    win7网络中添加ftp服务器 内容精选 换一换 支持.SFS容量型文件系统:支持为SFS容量型文件系统配置多个VPC,以使归属于不同VPC的云服务器,只要所属的VPC被添加到文件系统的VPC列表下, ...

  4. 抖音服务器升级维护中,抖音服务器维护中是什么意思

    抖音服务器维护中是什么意思?今天,根据很多网友的反映,很多用户在使用抖音App的时候发现手机上会出现"抖音服务器"正在维护中的字样.这是怎么回事呢?抖音发生这样的原因是什么呢?今天 ...

  5. ftp服务器账号,Serv-U中的FTP服务器账号管理

    前面我们已经介绍了有关于Serv-U中的FTP服务器设定过程.那么接下来我们在对它的账号的相关内容进行一下解析.首先了解一下这个软件的用户账号管理功能. 用户帐号管理 用户使用FTP服务器的一个最基本 ...

  6. 怎么制作web服务器iis,IIS中搭建web服务器

    IIS中搭建web服务器 前面的博文中和大家聊了如何在Windows Server 2012 R2的环境下搭建IIS服务器,今天我们就继续和大家聊聊如何在我们的IIS服务器中搭建一个WEB服务器,从而 ...

  7. activex control test container 服务器正在运行中_Desktop Central服务器RCE漏洞在野攻击分析...

    0x01 漏洞披露 在研究Desktop Central漏洞的过程中,我们在推特上找到了一位研究人员的帖子,该研究人员于2020年3月5日披露了Desktop Central的RCE漏洞. Zoho ...

  8. windows修改时间服务器,在Windows中设置时间服务器 2012 R2

    大家都知道, 时的服务是任何网络中最重要的组成部分, 任何系统, 在所有计算机上同步时钟是我们可以做的事情工作,也都成功同步的内部系统最少. 通常情况下,我们有一个网络时间服务器以从外部时钟获得的时间 ...

  9. 嵌入式转linux服务器,嵌入式Linux中的Web服务器应用

    Boa是一个非常小巧的Web服务器,其可执行代码只有60K左右.它是一个单任务的Web服务器,只能依次完成用户的请求,而不会fork出新的进程处理并发连接请求.但boa支持cgi,能够为cgi程序fo ...

  10. 服务器运行过程中跳线,服务器内部跳线地址原理

    弹性云服务器 ECS 弹性云服务器(Elastic Cloud Server)是一种可随时自助获取.可弹性伸缩的云服务器,帮助用户打造可靠.安全.灵活.高效的应用环境,确保服务持久稳定运行,提升运维效 ...

最新文章

  1. 前端笔记----定位
  2. GIOU loss+DIOU loss+CIOU loss
  3. 漫步数理统计二十八——混合分布
  4. Java基础知识之变量与常量、数据类型、类型转换
  5. 现代电子计算机诞生理论基础是什么,《计算机应用基础》习题集2
  6. Yii2学习笔记(一):Yii的安装和使用(base版)
  7. 在国外用什么app软件听歌 解除网易云音乐地区限制
  8. 如何免费批量将caj转换成PDF
  9. WPS(Word)中图注、域的使用基础
  10. Github 单文件快速下载 -- 使用 DownGit
  11. OneNET EDP协议讲解与应用
  12. mysql数据库实验+cmd界面运行基本操作总结(sql:数据增删改查,表格,视图,备份恢复)
  13. anaconda 代码提示,Anaconda安装OpenCV没有自动代码补全
  14. python图像处理:全景图片转鱼眼图片(鱼眼矫正)
  15. url地址的图片路径
  16. 584分学计算机报什么大学,2021年高考584分左右能上什么大学(100所)
  17. UFS系列7:描述符、标识和属性
  18. 可以播放音频的c语言程序,用C语言怎么实现播放音乐?
  19. Python计算矩阵相乘
  20. Oracle数据库描述错误的,下列有关数据库的描述 错误的是

热门文章

  1. MongoDB 特殊索引
  2. html个人空间制作,html+css+js制作简单网站首页
  3. ps无缝拼图教程一:无缝拼接花纹图案
  4. 《持续交付》书评与访谈
  5. 平面设计素材:15000套高端平面logo,免费赠送给所有平面设计师...
  6. ps界面为啥突然变大了_PS修图教程,如何把把照片变得更有质感
  7. 【阿里云-如何实现实名认证】
  8. linux 创建gpt分区,parted创建GPT分区
  9. Bing搜索崩了“无法访问”解决方案
  10. 个人的尚学堂数据库oracle笔记(3)