文章目录
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中,下面看下这个方法做了什么:
org.apache.rocketmq.remoting.netty.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中读取参数信息,再下面就是赋值了