[关闭]
@liyuj 2017-11-29T13:12:02.000000Z 字数 2985 阅读 1973

Apache-Ignite-2.3.0-中文开发手册

4.安全

4.1.SSL和TLS

4.1.1.节点间的安全连接

Ignite允许在所有节点之间使用SSL Socket进行通信。要使用SSL,需要设置Factory<SSLContext>以及配置Ignite配置文件的SSL段落,Ignite提供了一个默认的SSL上下文工厂,org.apache.ignite.ssl.SslContextFactory,他用一个配置好的keystore来初始化SSL上下文。
XML:

  1. <bean id="cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
  2. <property name="sslContextFactory">
  3. <bean class="org.apache.ignite.ssl.SslContextFactory">
  4. <property name="keyStoreFilePath" value="keystore/server.jks"/>
  5. <property name="keyStorePassword" value="123456"/>
  6. <property name="trustStoreFilePath" value="keystore/trust.jks"/>
  7. <property name="trustStorePassword" value="123456"/>
  8. </bean>
  9. </property>
  10. </bean>

Java:

  1. IgniteConfiguration igniteCfg = new IgniteConfiguration();
  2. SslContextFactory factory = new SslContextFactory();
  3. factory.setKeyStoreFilePath("keystore/server.jks");
  4. factory.setKeyStorePassword("123456".toCharArray());
  5. factory.setTrustStoreFilePath("keystore/trust.jks");
  6. factory.setTrustStorePassword("123456".toCharArray());
  7. igniteCfg.setSslContextFactory(factory);

某些情况下需要禁用客户端侧的证书认证(比如连接到一个自签名的服务器时),这可以通过给上述工厂设置禁用信任管理器实现,他可以通过getDisabledTrustManager获得。
XML:

  1. <bean id="cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
  2. <property name="sslContextFactory">
  3. <bean class="org.apache.ignite.ssl.SslContextFactory">
  4. <property name="keyStoreFilePath" value="keystore/server.jks"/>
  5. <property name="keyStorePassword" value="123456"/>
  6. <property name="trustManagers">
  7. <bean class="org.apache.ignite.ssl.SslContextFactory" factory-method="getDisabledTrustManager"/>
  8. </property>
  9. </bean>
  10. </property>
  11. </bean>

Java:

  1. IgniteConfiguration igniteCfg = new IgniteConfiguration();
  2. SslContextFactory factory = new SslContextFactory();
  3. factory.setKeyStoreFilePath("keystore/server.jks");
  4. factory.setKeyStorePassword("123456".toCharArray());
  5. factory.setTrustManagers(SslContextFactory.getDisabledTrustManager());
  6. igniteCfg.setSslContextFactory(factory);

如果配置了安全,那么日志就会包括:communication encrypted=on

  1. INFO: Security status [authentication=off, communication encrypted=on]

4.1.2.SSL和TLS

Ignite允许使用不同的加密类型,支持的加密算法可以参照:http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#SSLContext,可以通过setProtocol()方法进行设置,默认值是TLS
XML:

  1. <bean id="cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
  2. <property name="sslContextFactory">
  3. <bean class="org.apache.ignite.ssl.SslContextFactory">
  4. <property name="protocol" value="SSL"/>
  5. ...
  6. </bean>
  7. </property>
  8. ...
  9. </bean>

Java:

  1. IgniteConfiguration igniteCfg = new IgniteConfiguration();
  2. SslContextFactory factory = new SslContextFactory();
  3. ...
  4. factory.setProtocol("TLS");
  5. igniteCfg.setSslContextFactory(factory);

4.1.3.配置

下面的配置参数可以通过SslContextFactory进行配置:

setter方法 描述 默认值
setKeyAlgorithm 设置key管理器算法,用于创建key管理器。注意,大多数情况下默认值即可,但是在Android平台需要设置成X509. SunX509
setKeyStoreFilePath keystore文件路径,该参数为必须参数,否则SSL上下文无法初始化
setKeyStorePassword keystore密码
setKeyStoreType 用于上下文初始化的keystore类型 JKS
setProtocol 安全传输协议 TLS
setTrustStoreFilePath truststore文件路径
setTrustStorePassword truststore密码
setTrustStoreType 用于上下文初始化的truststore类型 JKS
setTrustManagers 设置配置好的信任管理器
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注