概要
在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如下:
package org.elasticsearch.license;
import java.nio.*; import java.util.*;
import java.security.*;
import org.elasticsearch.common.xcontent.*;
import org.apache.lucene.util.*;
import org.elasticsearch.common.io.*;
import java.io.*;
public class LicenseVerifier {
public static boolean verifyLicense(final License license, final byte[] encryptedPublicKeyData) {
return true;
}
public static boolean verifyLicense(final License license) {
return true;
}
}
- XPackBuild.java如下:
package org.elasticsearch.xpack.core;
import org.elasticsearch.common.io.*;
import java.net.*;
import org.elasticsearch.common.*;
import java.nio.file.*;
import java.io.*;
import java.util.jar.*;
public class XPackBuild {
public static final XPackBuild CURRENT;
private String shortHash;
private String date;
@SuppressForbidden(reason = "looks up path of xpack.jar directly") static Path getElasticsearchCodebase() {
final URL url = XPackBuild.class.getProtectionDomain().getCodeSource().getLocation();
try {
return PathUtils.get(url.toURI()); }
catch (URISyntaxException bogus) {
throw new RuntimeException(bogus); }
}
XPackBuild(final String shortHash, final String date) {
this.shortHash = shortHash;
this.date = date;
}
public String shortHash() {
return this.shortHash;
}
public String date(){
return this.date;
}
static {
final Path path = getElasticsearchCodebase();
String shortHash = null;
String date = null;
Label_0157: {
shortHash = "Unknown"; date = "Unknown";
}
CURRENT = new XPackBuild(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@linux scripts]# ll
total 18
-rw-r--r-- 1 root root 410 Jun 23 11:49 LicenseVerifier.class
-rw-r--r-- 1 root root 523 Jun 23 11:32 LicenseVerifier.java
-rw-r--r-- 1 root root 1508 Jun 23 11:52 XPackBuild.class
-rw-r--r-- 1 root root 1311 Jun 23 11:34 XPackBuild.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申请页面进行申请,会发送到邮箱,下载后进行编辑
将"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
}
}
到此,证书许可证完成修改!