爱测未来安全-从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文件夹我们得到如下:
在示例文件夹中,有如下示例文件:
example.sh 是我们需要修改的文件,etc文件中需要我们修改成我们自定义的一些证书配置信息,
clean.sh是可以清理生成的证书文件
其他三个 gen*.sh文件将会在example.sh 中调用;
我们首先看下example.sh中内容,如有不同,请修改成与我这边类似的(请确保知晓修改方法的前提下做修改);
可知,我们大概流程就是调用几个脚本来生成证书。
目前我们是运行的单节点的 es,此外想调通es的 java client使用https方式访问es的transport端口
我们可以修改下example.sh为如下:
上面参数 一个是 kesystore password 一个是ca password,可以自行调试。
此外我们还要修改下 etc下面的关于证书相关自定义配置:
修改如下:
运行example.sh (需要java环境,可在linux下执行,或者带bash的windows,建议linux下执行)
得到以下文件:
生成如上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>
执行完毕 有类似如下结果:
表明执行成功,这个是不需要重启es的 。
此时直接访问我们es:
使用http访问会无法访问,必须使用https,
另外 我们需要输入刚才 在sg_internal_users.yml里修改的密码才能看到es的数据
至此web端的 sg2给es加密,且使用https 就搞定了。
二: JavaClient Transport 使用上述证书访问transport端口
请参考(https://floragunn.com/searchguard-elasicsearch-transport-clients/)
在ESDataSource类中修改setting,setting修改的配置如下:
其中 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加固方式。