爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)

上篇说到https的一个大体情况,本节将实际带带大家操作一下从证书制作到 使用search-guard-2,search-guard-ssl来用https的方式加密我们的 elasticsearch transport端口的数据以及http访问方式。


一: 证书制作


证书制作其实有多种方式,本文采用了 searchguard2官doc的 example来做了制作。

    环境准备:

     elasticsearch 2.4.1 linux/windows 都一样。无非后续一个是 使用 sgadmin.bat  一个是使用sgadmin.sh

     Java环境必备的,elasticsearch本身就要求java环境无序多说,本文是1.8的java

     Linux机器一台,本文是 ubuntu14.04

    获取当前 elasticsearch2.4.1所支持的 search-guard-2 以及search-guard-ssl 版本

     从https://github.com/floragunncom/search-guard/wiki查询到

    当前(2017-01-27) elasticsearch2.4.1支持的 sg2 版本是 2.4.1.10  sg-ssl版本是 2.4.1.19

    

    于是我们首先给 es装上这个两个插件。

    

    进入elasticsearch目录下

    执行 

  • sudo bin/plugin install -b com.floragunn/search-guard-2/2.4.1.10

  • sudo bin/plugin install -b com.floragunn/search-guard-ssl/2.4.1.19


   以上两个命令经测试是ok的。如有问题,请自行定位网络问题。


   此外我们要下载证书制作脚本地址为:

    

        https://github.com/floragunncom/search-guard-ssl

    在这个位置 有一个 example-pki-scripts 这里面就是官方的 sg2ssl证书制作示例

    我们将这个github工程down下来, 于是加上上面的 es文件夹我们得到如下:

爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)

    

在示例文件夹中,有如下示例文件:

爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)



 example.sh 是我们需要修改的文件,etc文件中需要我们修改成我们自定义的一些证书配置信息,

 clean.sh是可以清理生成的证书文件

 其他三个 gen*.sh文件将会在example.sh 中调用;

 

我们首先看下example.sh中内容,如有不同,请修改成与我这边类似的(请确保知晓修改方法的前提下做修改);

爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)


可知,我们大概流程就是调用几个脚本来生成证书。

目前我们是运行的单节点的 es,此外想调通es的 java client使用https方式访问es的transport端口

我们可以修改下example.sh为如下:

爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)


上面参数 一个是  kesystore password 一个是ca password,可以自行调试。

此外我们还要修改下 etc下面的关于证书相关自定义配置:

修改如下:

    

爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)


运行example.sh (需要java环境,可在linux下执行,或者带bash的windows,建议linux下执行)

得到以下文件:

爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)


生成如上3个我们需要用到的文件;

然后我们再修改下es的配置文件,添加如下配置:

searchguard.authcz.admin_dn:

  - CN=itesttech,OU=client,O=client,L=test, C=DE

searchguard.ssl.http.enabled: true

searchguard.ssl.http.keystore_filepath: itesttech-keystore.jks

searchguard.ssl.http.keystore_password: xxxx

searchguard.ssl.http.truststore_filepath: truststore.jks

searchguard.ssl.http.truststore_password: xxx

searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks

searchguard.ssl.transport.keystore_password: xxxx

searchguard.ssl.transport.truststore_filepath: truststore.jks

searchguard.ssl.transport.truststore_password: xxxxx

searchguard.ssl.transport.enforce_hostname_verification: false

此时我们启动elasticsearch,bin/elasticsearch

启动成功后,

我们还需要对 sg2进行初始化索引

进入到 es下plugin目录下 search-guard-2/tools下

将上述的 node-0-keystore.jks 和trustore.jks拷贝到此目录下

此外 在 plugins/search-guard-2/还有个 sgconfig文件,此文件中保存了sg2 内部用户的密码存储的hash值

如果我们想要修改默认的admin账户密码 admin,

则需要通过 tools下的 hash.sh(bat)来生成你需要改的密码的 hash,然后修改sgconfig/sg_internal_users.yml

将admin的hash值改成你修改后密码的 hash(由hash.sh -p 命令生成)

     chmod +x hash.sh

    ./hash.sh -p "yourpassword"

然后在tools下 执行

     ./sgadmin.sh  -ts truststore.jks -tspass <yourpass> -ks itesttech-keystore.jks -kspass <yourpass>  -cd ../sgconfig -icl - nhnv -p <yourtransportport>

执行完毕 有类似如下结果:

爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)


表明执行成功,这个是不需要重启es的 。

此时直接访问我们es:

爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)


使用http访问会无法访问,必须使用https,

爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)


另外 我们需要输入刚才 在sg_internal_users.yml里修改的密码才能看到es的数据

至此web端的 sg2给es加密,且使用https 就搞定了。

二: JavaClient Transport 使用上述证书访问transport端口


请参考(https://floragunn.com/searchguard-elasicsearch-transport-clients/)

ESDataSource类中修改settingsetting修改的配置如下:

爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)


其中 keystorePath trustStorePath为上述制作的证书,自行存放下即可,我们使用trustore.jks itesttech-keystore.jks即可。

相关文档见:

    https://floragunn.com/searchguard/

    https://github.com/floragunncom/search-guard-docs

    https://floragunn.com/searchguard-elasicsearch-transport-clients/

以上 ,就是我们使用sg2对我们的es进行加固的初步介绍,sg2官方是承诺永久免费的,所以也是比较推荐大家使用的公网es加固方式。


公众号:itest_forever

爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)

CSDN:http://blog.csdn.NET/itest_2016

QQ群:274166295(爱测未来2群)、610934609(爱测未来3群)