教程基于 ELK 6.5.4
版本实现并测试通过,理论上支持 6.x 版本。仅供学习交流,严禁用于商业用途。
TL; DR
需要开箱即用的 Docker,请参见上一节内容「ELK on Docker with X-Pack」.
简单来说,破解 X-Pack 是 3 步操作:
- 替换 X-Pack 的证书验证模块代码
- 提交一个符合自己需求的证书文件
- 修改 X-Pack 的登陆密码/关闭安全验证功能
操作步骤
安装 ELK with X-Pack 的环境
我是通过 Docker 来一次性安装的,网上的教程很多,不再赘述。
替换 X-Pack 的证书验证模块
本质上是反编译
X-Pack-Core 的证书验证函数。
分别是 org.elasticsearch.license.LicenseVerifier, org.elasticsearch.xpack.core.XPackBuild。那么我把其中一个验证函数摘抄出来说明问题:
1 2 3 4 5 6 7 8 9 10 11 12 13
| # org.elasticsearch.license.LicenseVerifier package org.elasticsearch.license;
public class LicenseVerifier { public static boolean verifyLicense(final License license, final byte[] encryptedPublicKeyData) { return true; }
public static boolean verifyLicense(final License license) { return true; } }
|
然后让函数的结果直接返回 true ,再编译回正常的文件替换掉,问题解决。
所以把编译后的文件 x-pack-core-6.5.4.jar
替换到路径 /usr/share/elasticsearch/modules/x-pack-core/x-pack-core-6.5.4.jar
即可。
- 放上直接编译好的 jar 文件到 Github,有需要可以看看这里
- 不同安装方式的 ELK,ES 的安装路径会不一样,详情见此官方文档
提交一个修改了「有效期」以及「使用范围」的证书文件
可以直接把以下代码保存为 license.json
文件,
现在的ES接收什么样的证书,只要符合格式,都会认为是一个合法的证书。
1 2 3 4 5 6 7 8 9 10 11 12 13
| { license: { uid: "ea808341-3d7e-4579-85a3-d12656c1f0a7", type: "trial", issue_date_in_millis: 1551830400000, expiry_date_in_millis: 2855980923000, max_nodes: 100, issued_to: "aaa (non-production environments)", issuer: "API", signature: "AAAAAwAAAA0d0foz8ket6LdEx3GvAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQAgSBeZqIpgIgPtx3QyVzFbhoLK68XkY3XiaH15Gq1FFm5IBHxISlmOHH9sAGf3R9o4dqQbByKuFr7wlPmnG6yR9Z3tDWfDA90r0Tyvha2GZi7cV4P/ExaV1jPwuUVR5nMP7nhExEQXvkRL+7eyeqOwpyV0eRdcqsJgQ2Aq4fgIGK73pABwFwfJFTI2OMTevqYlY1ZREZ4LgrNGMSItOujuHleHGp6jSGUdJoE1wnc0xkZWwMpKArURqlPoENZa4MjvFoK4uu+3/0/rEg4Jmgi7ZgEPWpc1QnSYiZzJ0W1FWaxi+m/HwUsnG+1tv9QPfXcWTbf76bOZe7+zT9HauKC+", start_date_in_millis: 1551830400000 } }
|
然后通过 CURL 命令提交到 ES 中。
1 2 3
| $ curl -H "Content-Type: application/json" \ -XPOST {ES_SERVER_IP}:9200/_xpack/license \ -d @{证书文件路径}/lisence.json
|
解释:
-H
: 使用 JSON 格式编码发送
-X
: 使用的方法,这里用 POST 方法
-d
: 附带的参数用文件上传
这里需要有几点注意:
- 如果正确提交,会返回一个空数组。
- 如果是通过提交一整个 JSON 文件,在文件路径面前需要添加 **@**,这是 CURL 的一个用法。
关闭 X-Pack 的安全验证功能
修改 X-Pack 的密码放到下一节讲述,这一节只介绍如何关闭 X-Pack 的安全验证功能。
在 ElasticSearch 的配置文件 elasticsearch.yml
中加入以下参数,重启后即可。
1
| xpack.security.enabled: false
|
了解更多 ELK 专题
- ELK on Docker with X-Pack [了解一下]
- 破解 X-Pack [了解一下]
- 非交互式修改 ElasticSearch 密码 [了解一下]
- Logstatsh 的索引与模版文件 (template) [了解一下]
致谢
- Esticsearch之x-pack破解
- elasticsearch x-pack 5x,6x 授权永久破解
- Elasticsearch6.2.2 X-pack破解及安装教程