public void loadSslContext() { TlsMode tlsMode = TlsSystemConfig.tlsMode; log.info("Server is running in TLS {} mode", tlsMode.getName()); if (tlsMode != TlsMode.DISABLED) { try { sslContext = TlsHelper.buildSslContext(false); log.info("SSLContext created for server"); } catch (CertificateException e) { log.error("Failed to create SSLContext for server", e); } catch (IOException e) { log.error("Failed to create SSLContext for server", e); } } }
之后就是构建SslContext了,而sslContext这个类属于netty内部的,就不去深究了。这里普及下ssl和tls分别是什么:
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
也就是两种网络协议。
而构建sslContext的方法在TlsHelper中,下面看下这个方法做了什么:
这个类中最主要的就是buildSslContext方法,所以看这个方法顺便把这个类过一遍。
入口如下:
public static SslContext buildSslContext(boolean forClient) throws IOException, CertificateException { File configFile = new File(TlsSystemConfig.tlsConfigFile); extractTlsConfigFromFile(configFile); logTheFinalUsedTlsConfig();
可以看到首先是从TlsSystemConfig中读取配置文件路径,解析配置文件,然后打印配置文件内容中的重要信息日志,进入
extractTlsConfigFromFile(configFile)
看下
除了配置文件判空外,比较核心的代码就是下面这段:
Properties properties; properties = new Properties(); InputStream inputStream = null; try { inputStream = new FileInputStream(configFile); properties.load(inputStream); } catch (IOException ignore) { } finally { if (null != inputStream) { try { inputStream.close(); } catch (IOException ignore) { } } }
使用io流从configFile中读取参数信息,再下面就是赋值了