破解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 } }