在 Javascript(Rhino 引擎)中实现自己的 TrustManager
Implement own TrustManager in Javascript (Rhino engine)
我正在尝试在 Java 脚本中实现我自己的 TrustManager,但我不知道如何实现它。
在 Java 我有以下内容:
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
我尝试将以下内容用于 X509TrustManager:
js> obj = { getAcceptedIssuers : function() { return null; }, checkClientTrusted: function() { }, checkServerTrusted: function() { } }
[object Object]
js> x509tm = new javax.net.ssl.X509TrustManager(obj)
adapter1@2eee9593
js>
然后我不知道如何创建TrustManager。如何在 Javascript (Rhino 1.6 release 7 2008 01 02) 中做到这一点?
经过几个小时,我终于实现了。
以上Java部分对应的代码如下:
obj = { getAcceptedIssuers : function() { return null; }, checkClientTrusted: function() { return; }, checkServerTrusted: function() { return; } };
var o = new JavaAdapter(javax.net.ssl.X509TrustManager, obj);
var oo = new Array();
oo.push(o);
然后使用它,一切变得简单:
var sc = javax.net.ssl.SSLContext.getInstance("SSL");
sc.init(null, oo, new java.security.SecureRandom());
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
希望这对处于相同情况的人有所帮助。
扩展 user2360915 的答案,在 Rhino 中扩展 class 的另一种方法是使用格式:
new ClassType({NewFunction:function(){}})
例如:
var HNV = new javax.net.ssl.HostnameVerifier({ verify:function(hostname,session){return true;} });
这与 user2360915 的初始方法略有不同(尽管它需要相同的数组解决方案才能工作):
var ExtendedTrustManager = new javax.net.ssl.X509TrustManager({accepted:null,checkClientTrusted:function(xcs, string){},checkServerTrusted:function(xcs, string){this.accepted = xcs;},getAcceptedIssuers:function(){return this.accepted;}});
var TMArray = new Array();
TMArray.push(ExtendedTrustManager);
我正在尝试在 Java 脚本中实现我自己的 TrustManager,但我不知道如何实现它。
在 Java 我有以下内容:
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
我尝试将以下内容用于 X509TrustManager:
js> obj = { getAcceptedIssuers : function() { return null; }, checkClientTrusted: function() { }, checkServerTrusted: function() { } }
[object Object]
js> x509tm = new javax.net.ssl.X509TrustManager(obj)
adapter1@2eee9593
js>
然后我不知道如何创建TrustManager。如何在 Javascript (Rhino 1.6 release 7 2008 01 02) 中做到这一点?
经过几个小时,我终于实现了。
以上Java部分对应的代码如下:
obj = { getAcceptedIssuers : function() { return null; }, checkClientTrusted: function() { return; }, checkServerTrusted: function() { return; } };
var o = new JavaAdapter(javax.net.ssl.X509TrustManager, obj);
var oo = new Array();
oo.push(o);
然后使用它,一切变得简单:
var sc = javax.net.ssl.SSLContext.getInstance("SSL");
sc.init(null, oo, new java.security.SecureRandom());
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
希望这对处于相同情况的人有所帮助。
扩展 user2360915 的答案,在 Rhino 中扩展 class 的另一种方法是使用格式:
new ClassType({NewFunction:function(){}})
例如:
var HNV = new javax.net.ssl.HostnameVerifier({ verify:function(hostname,session){return true;} });
这与 user2360915 的初始方法略有不同(尽管它需要相同的数组解决方案才能工作):
var ExtendedTrustManager = new javax.net.ssl.X509TrustManager({accepted:null,checkClientTrusted:function(xcs, string){},checkServerTrusted:function(xcs, string){this.accepted = xcs;},getAcceptedIssuers:function(){return this.accepted;}});
var TMArray = new Array();
TMArray.push(ExtendedTrustManager);