破解docker中Elasticsearch-xpack插件的许可证

本文为下文之延续,旨在解决ES5.x/6.x中xpack许可证过期问题。本文所用为es5.x,jdk为1.8,均以docker容器形式部署。

ES中的xpack许可证最多试用30天,非常恼人 ,而且上文中提出的 重新部署docker容器重置许可证 的方法好像也失效了(反正我复现失败)。

所以只有通过破解x-pack插件来实现永久使用。话不多说,步骤如下:

1.将x-pack的jar包从docker容器中导出。

docker cp [容器id]:/usr/share/elasticsearch/plugins/x-pack/x-pack-5.6.16.jar /root/x-pack-5.6.16.jar

2. 通过jar解包,并查看其版本号( 你当前环境下的java版本必须与jar包中的版本号保持一致 !)

jar -xvf x-pack-5.6.16.jar
cd org/elasticsearch/license/
javap -verbose LicenseVerifier.class version
# 主要关注major version的值,major version:52 对应java 8,major version:51 对应java 7

3. 新建一个文件LicenseVerifier.java,将以下内容复制其中:

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;
    }
}

4. 将LicenseVerifier.java编译为LicenseVerifier.class,其中需要用到elasticsearch-5.6.16.jar、lucene-core-6.6.1.jar、x-pack-5.6.16.jar,这三者的版本号根据es版本不同会有差异,前两者可在es目录下的/lib文件中找到,x-pack就是之前docker中导出的jar包。

javac -cp "[你的路径]/elasticsearch-5.6.16.jar:[你的路径]/lucene-core-6.6.1.jar:[你的路径]/x-pack-5.6.16.jar" LicenseVerifier.java

5. 将LicenseVerifier.java复制到org/elasticsearch/license/下并覆盖源文件。然后回到先前解包后x-pack的主路径,执行如下命令重新打包(该包要保存好,方便多次使用):

jar cvf x-pack-5.6.16.jar *

6. 将重新打好的jar包复制进docker中xpack原来的位置:

docker cp /root/x-pack-5.6.16.jar [容器id]:/usr/share/elasticsearch/plugins/x-pack/x-pack-5.6.16.jar

7. 新建一个license.json文件,并写入如下内容

{"license":
    {
        "uid":"537c5c48-c1dd-43ea-ab69-68d209d80c32",
        "type":"platinum",
        "issue_date_in_millis":1558051200000,
        "expiry_date_in_millis":2524579200999,
        "max_nodes":1000,
        "issued_to":"pyker",
        "issuer":"Web Form",
        "signature":"AAAAAwAAAA3fIq7NLN3Blk2olVjbAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQCjNd8mwy8B1sm9rGrgTmN2Gjm/lxqfnTEpTc+HOEmAgwQ7Q1Ye/FSGVNIU/enZ5cqSzWS2mY8oZ7FM/7UPKVQ4hkarWn2qye964MW+cux54h7dqxlSB19fG0ZJOJZxxwVxxi8iyJPUSQBa+QN8m7TFkK2kVmP+HnhU7mGUrqXt3zTk5d3pZw3QBQ/Rr3wmSYC5pxV6/o2UHFgu1OPDcX+kEb+UZtMrVNneR+cEwyx7o5Bg3rbKC014T+lMtt69Y080JDI5KfHa7e9Ul0c3rozIL975fP45dU175D4PKZy98cvHJgtsCJF3K8XUZKo2lOcbsWzhK2mZ5kFp0BMXF3Hs",
        "start_date_in_millis":1558051200000
    }
}

8. 执行如下命令导入许可证,密码为elastic的密码,初始值为changeme。(出现acknowledge: true代表导入成功)

curl -XPUT -u elastic "http://localhost:9200/_xpack/license" -H “Content-Type: application/json” -d @license.json

9. 检查许可证有效期,现在证书是2050年过期!大功告成~

Enter host password for user 'elastic':
{
  "license" : {
    "status" : "active",
    "uid" : "537c5c48-c1dd-43ea-ab69-68d209d80c32",
    "type" : "platinum",
    "issue_date" : "2019-05-17T00:00:00.000Z",
    "issue_date_in_millis" : 1558051200000,
    "expiry_date" : "2049-12-31T16:00:00.999Z",
    "expiry_date_in_millis" : 2524579200999,
    "max_nodes" : 1000,
    "issued_to" : "pyker",
    "issuer" : "Web Form",
    "start_date_in_millis" : 1558051200000
  }
}

参考文献

[1] 更新 ELK 白金版 2050年通用破解流程&文件

[2] elasticsearch x-pack 5x,6x 授权永久破解