这是我的第一个问题,请耐心等待。我目前正在为Android平台开发Cordova应用程序,最近我被要求通过https测试与服务器的连接。我找到了Secure-HTTP cordova插件(http://plugins.telerik.com/cordova/plugin/secure-http)并决定在JBoss eap服务器上安装一个简单的Hello-world应用程序(JBoss Developer Studio中的最新版本)(实际上我使用了helloworld-ws quickstart)。首先,我尝试使用插件方法通过标准HTTP进行连接:
var result = window.cordovaHTTP.get(
"http://my_adress:port",
{}, // optional params
{}, // optional headers
function(msg) {alert("OK: " + msg)},
function(msg) {alert("ERROR: " + msg)});
我还将我的地址列入白名单,以便可以从我的设备访问。结果对象包含状态信息200和html代码作为其值(因此它是成功的)。我不知道为什么功能与'OK'警报没有被解雇。要启用与Jboss的https连接,我在standalone.xml
中添加了这些行:
<security-realm name="UndertowRealm">
<server-identities>
<ssl>
<keystore path="myKey.keystore" relative-to="jboss.domain.config.dir" keystore-password="myPass" alias="alias" key-password="myPass"/>
</ssl>
</server-identities>
</security-realm>
<security-realms>
中添加了上面的安全领域。我也在下载服务中创建了新的监听器<https-listener name="https" socket-binding="https" security-realm="UndertowRealm"/>
我没有触摸默认的https监听端口(8443)。
myKey.keystore
由java keytool生成。还使用keytool从我的密钥库创建了myCert.crt
。然后我将myCert.crt
放在我的Cordova项目的/ platforms/android/assets
位置,并将myKey.keystore
放在JBoss的可访问位置。我在我的虚拟设备上安装了myCert.crt
证书(没有错误)。
第一个问题:https:/ myAdress:8443仅在浏览JBoss Developer Studio时有效,在Chrome浏览器中我得到了ERR_CONNECTION_CLOSED。
当我尝试使用Secure-HTTP插件时使用:
var isPinned = window.cordovaHTTP.enableSSLPinning(
true,
function (msg) {alert("Success: " + msg)},
function (msg) {alert("Error: " + msg)}
);
var result = window.cordovaHTTP.get(
"https://myAdress:8443",
{},
{},
function(msg) {alert("OK: " + msg)},
function(msg) {alert("ERROR: " + msg)}
);
我收到了一个嵌套的结果对象,状态= 500,值=&#39;内部错误&#39;。没有警报功能被触发,尝试将其记录到控制台,但仍未使用这些功能。当我仅使用get
方法时,没有enableSSLPinning
我收到&#34; SSL握手失败&#34;错误。
我尝试在get
成功函数中嵌套enableSSLPinning
,但它从未被触发(即使isPinned具有&#39; OK&#39;值)。
现在我完全不知道在哪里搜索问题,也是我第一次通过JavaScript和JBoss实现这种连接。也许我错过了JBoss配置中的一些东西?或者myKey.keystore和myCert.crt文件有问题吗?也许JBoss对我的任务有点复杂,你是否建议在部署服务器上更容易测试https?我将不胜感激任何建议!
编辑:问题解决了,这是证书问题。要在我的模拟AVD上安装我自己签名的证书,我根据以下网站创建了证书:https://aboutssl.org/how-to-create-and-import-self-signed-certificate-to-android-device。我想连接cordova android应用程序与托管在我的PC的localhost上的JBoss服务器。为此,我使用CN =&#34; myDomain&#34;创建了证书,然后通过adb cli在我的AVD上修改了/ etc / hosts文件。
adb root
adb remount
adb echo '10.0.2.2 myDomain' >> /etc/hosts
警告:adb remount不适用于Android SDK Tools ver。 25.1.7。