Java HTTP 协议中的 SSL TLS 配置
一 核心概念与准备
keytool -genkeypair -alias server -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365keytool -exportcert -alias server -file server.cer -keystore keystore.jkskeytool -importcert -alias server -file server.cer -keystore $JAVA_HOME/lib/security/cacertshttps.protocols=TLSv1.2,TLSv1.3、javax.net.ssl.keyStore、javax.net.ssl.trustStore 等(生产环境更推荐在代码中显式配置 SSLContext)。二 客户端配置
SSLContext.getInstance("TLS").init(null, trustManagers, null)conn.setSSLSocketFactory(sslContext.getSocketFactory())System.setProperty("https.protocols", "TLSv1.2,TLSv1.3")SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(trustStore, trustPassword).build();SSLConnectionSocketFactory sf = new SSLConnectionSocketFactory(sslContext);CloseableHttpClient client = HttpClients.custom().setSSLSocketFactory(sf).build();OkHttpClient client = new OkHttpClient.Builder().sslSocketFactory(sslContext.getSocketFactory(), trustManager).build();三 服务端配置
HttpsServer server = HttpsServer.create(new InetSocketAddress(8443), 0);server.setHttpsConfigurator(new HttpsConfigurator(sslContext) { ... });configure(HttpsParameters) 中设置 setNeedClientAuth(true/false)、setCipherSuites、setProtocols。SSLServerSocketFactory ssf = sslContext.getServerSocketFactory();ServerSocket ss = ssf.createServerSocket(8443);KeyStore ks = KeyStore.getInstance("JKS"); ks.load(in, pwd);KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(ks, pwd);SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);setNeedClientAuth(true)。四 协议与算法安全建议
jdk.tls.disabledAlgorithms=SSLv3,TLSv1,TLSv1.1,RC4,MD5withRSA,...https.protocols=TLSv1.2,TLSv1.3五 常见问题与排查
https.protocols 或 SSLParameters 明确协商版本。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。