概要
在elasticsearch中有30天的试用期,我找到网上大神的一些文章,试用了之后发现可以进行破解使用,整个过程比较简单,特此写下笔记
http://ip:9100/?auth_user=elastic&auth_password=123456
现在发现都访问不了,查了下日志才发现,我的license过期啦! 这时我才想起来x-pack好像是收费的。
破解x-pack
我的版本是x-pack-5.2.2,在elasticsearch插件中找到x-pack-5.2.2.jar,拷贝到其他目录下进行解压
找到LicenseVerifier.class (路径为:org.elasticsearch/license/LicenseVerifier.class)和XPackBuild.class(路径为:/org/elasticsearch/xpack/XPackBuild.class)文件
1.修改license
准备LicenseVerifier.java 和XPackBuild.java两个文件后进行替换
- LicenseVerifier.java如下:
packageorg.elasticsearch.license;importjava.nio.*;importjava.util.*;importjava.security.*;importorg.elasticsearch.common.xcontent.*;importorg.apache.lucene.util.*;importorg.elasticsearch.common.io.*;importjava.io.*;publicclassLicenseVerifier{publicstaticbooleanverifyLicense(finalLicenselicense,finalbyte[]encryptedPublicKeyData){returntrue;}publicstaticbooleanverifyLicense(finalLicenselicense){returntrue;}}- XPackBuild.java如下:
packageorg.elasticsearch.xpack.core;importorg.elasticsearch.common.io.*;importjava.net.*;importorg.elasticsearch.common.*;importjava.nio.file.*;importjava.io.*;importjava.util.jar.*;publicclassXPackBuild{publicstaticfinalXPackBuildCURRENT;privateStringshortHash;privateStringdate;@SuppressForbidden(reason="looks up path of xpack.jar directly")staticPathgetElasticsearchCodebase(){finalURLurl=XPackBuild.class.getProtectionDomain().getCodeSource().getLocation();try{returnPathUtils.get(url.toURI());}catch(URISyntaxExceptionbogus){thrownewRuntimeException(bogus);}}XPackBuild(finalStringshortHash,finalStringdate){this.shortHash=shortHash;this.date=date;}publicStringshortHash(){returnthis.shortHash;}publicStringdate(){returnthis.date;}static{finalPathpath=getElasticsearchCodebase();StringshortHash=null;Stringdate=null;Label_0157:{shortHash="Unknown";date="Unknown";}CURRENT=newXPackBuild(shortHash,date);}}2.打包成class
打包成class,而后替换。如果你的安装在/usr/local下,那么大概如下
- LicenseVerifier
到LicenseVerifier.java所存放的目录下执行:
javac-cp"/usr/local/elasticsearch/lib/elasticsearch-5.2.2.jar:/usr/local/elasticsearch/lib/lucene-core-6.4.1.jar:/usr/local/elasticsearch/plugins/x-pack/x-pack-5.2.2.jar"LicenseVerifier.java- XPackBuild
到XPackBuild.java所存放的目录下执行:
javac-cp"/usr/local/elasticsearch/lib/elasticsearch-5.2.2.jar:/usr/local/elasticsearch/lib/lucene-core-6.4.1.jar:/usr/local/elasticsearch/plugins/x-pack/x-pack-5.2.2.jar"XPackBuild.java如下:生成的所需文件
[root@linuxscripts]# ll total18-rw-r--r--1root root410Jun2311:49LicenseVerifier.class-rw-r--r--1root root523Jun2311:32LicenseVerifier.java-rw-r--r--1root root1508Jun2311:52XPackBuild.class-rw-r--r--1root root1311Jun2311:34XPackBuild.java为了能够分辨的更清楚,创建一个目录demo,复制进去后解压,而后删除原来的包或者备份
[root@linux ]# cp /usr/local/elasticsearch/plugins/x-pack/x-pack-5.2.2.jar /data/scripts/demo/ [root@linux ]# cd /data/scripts/demo/ && jar -xvf x-pack-5.2.2.jar 解压到当前目录,注意,不会创建一个新文件夹,而是将所有jar包的内容全部解压到当前文件夹将class文件覆盖到解压出的文件下
[root@linux scripts]# \cp LicenseVerifier.class /data/scripts/demo/org/elasticsearch/license/LicenseVerifier.class[root@linux scripts]# \cp XPackBuild.class /data/scripts/demo/org/elasticsearch/xpack/XPackBuild.class当文件覆盖回去之后开始打包压缩
[root@linux scripts]# cd demo/[root@linux demo]# jar -cvfM0 x-pack-5.2.2.jar ./参数解析:
-c 创建jar包
-v 显示过程信息
-f 指定jar包的文件名
-M 不产生所有文件的清单文件(Manifest.mf)
-0 产生jar包时不对其中的内容进行压缩处理
生成一个新的x-pack-5.2.2.jar包后覆盖到/usr/local/elasticsearch/plugins/x-pack/下,license修改完成,然后重启es
[root@linux demo]# \cp x-pack-5.2.2.jar /usr/local/elasticsearch/plugins/x-pack/[root@linux demo]# ps aux|egrep ^elastic|awk '{print $2}'|xargs kill && su elastic -c "/usr/local/elasticsearch/bin/elasticsearch -d"3.申请license
打开elastic申请页面进行申请,会发送到邮箱,下载后进行编辑https://register.elastic.co
将"expiry_date_in_millis":1565135999999修改"expiry_date_in_millis":3107746200000 # 1年变为50年
将"type":“basic"修改为"type”:“platinum” # 基础版变更为铂金版
- 保存下来,修改后的文件可以重复使用到其它ES服务器
修改之前的许可证可用时间
[root@linux scripts]# curl -XGET -u elastic:123456 'http://localhost:9200/_license'{"license":{"status":"active","uid":"5227c16c-b7c8-4cd0-ad80-ab3d6200bca7","type":"trial","issue_date":"2020-06-22T08:18:57.356Z","issue_date_in_millis":1592813937356,"expiry_date":"2020-07-22T08:18:57.356Z","expiry_date_in_millis":1595405937356,"max_nodes":1000,"issued_to":"es_cluster","issuer":"elasticsearch","start_date_in_millis":-1}}更新 license文件
把文件重命名为:license.json,接着上次到服务器,放在自己喜欢的目录中,接着在该目录中执行如下命令:
[root@linux scripts]# curl -XPUT -u elastic:123456 'http://localhost:9200/_xpack/license?acknowledge=true' -d @license.json{"acknowledged":true,"license_status":"valid"}[root@linux scripts]# curl -XPUT -u elastic:123456 'http://localhost:9200/_xpack/license?acknowledge=true' -H "Content-Type: application/json" -d @license.json{"acknowledged":true,"license_status":"valid"}在查看修改之后的许可证可用时间
[root@linux scripts]# curl -XGET -u elastic:123456 'http://localhost:9200/_license'{"license":{"status":"active","uid":"45b6723c-ec7a-48de-ac5f-9625ca41acd1","type":"platinum","issue_date":"2020-06-23T00:00:00.000Z","issue_date_in_millis":1592870400000,"expiry_date":"2068-06-24T06:50:00.000Z",#到期时间变为2068年"expiry_date_in_millis":3107746200000,"max_nodes":100,"issued_to":"Bertram Bertram (???)","issuer":"Web Form","start_date_in_millis":1592870400000}}到此,证书许可证完成修改!