我正在编写一个需要SSL客户端身份验证的Android应用.我知道如何为桌面Java应用程序创建JKS密钥库,但Android仅支持BKS格式.我试图创建密钥库的每一种方式都会导致以下错误:
handling exception: javax.net.ssl.SSLHandshakeException: null cert chain
所以看起来客户端永远不会发送正确的证书链,可能是因为我没有正确创建密钥库.我无法在桌面上启用SSL调试,因此这使得它比应该更加困难.
作为参考,以下是IS用于创建BKS 信任库的命令:
keytool -importcert -v -trustcacerts -file "cacert.pem" -alias ca -keystore "mySrvTruststore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-145.jar" -storetype BKS -storepass testtest
这是我尝试过的命令,它无法创建BKS客户端密钥库:
cat clientkey.pem clientcert.pem cacert.pem > client.pem
keytool -import -v -file <(openssl x509 -in client.pem) -alias client -keystore "clientkeystore" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-145.jar" -storetype BKS -storepass testtest
Run Code Online (Sandbox Code Playgroud) 我必须实现从客户端到服务器的反向隧道.我使用以下命令使用JSCH
session.setPortForwardingR(rport, lhost, lport);
Run Code Online (Sandbox Code Playgroud)
它的工作原理(另请参阅使用JSCH Java反向SSH隧道)!
接下来我必须通过双向身份验证的HTTPS流隧道我的ssh会话:
Run Code Online (Sandbox Code Playgroud)client -> firewall -> apache https -> ssh server ----------------------> HTTPS ====================================> SSH ---------------------->
我在找
解决方案:
Run Code Online (Sandbox Code Playgroud)## Load the required modules. LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_connect_module modules/mod_proxy_connect.so ## Listen on port 8443 (in addition to other ports like 80 or 443) Listen 8443 <VirtualHost *:8443> ServerName youwebserver:8443 DocumentRoot /some/path/maybe/not/required ServerAdmin admin@example.com ## …
我是WSDL webservices的新手,使用KSoap2库在android中调用wsdl webservices.
这是我的soap请求转储
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:loy="http://loyalcard.com/LoyalCardWebService/">;
<soapenv:Header/>
<soapenv:Body>
<loy:GetOffersByLocation>
<!--Optional:-->
<loy:Location>
<!--Optional:-->
<loy:Latitude>?</loy:Latitude>
<!--Optional:-->
<loy:Longitude>?</loy:Longitude>
</loy:Location>
</loy:GetOffersByLocation>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
我正在传递这个SopaObject,如:
PropertyInfo latitude = new PropertyInfo();
latitude.name="Latitude";
latitude.type=Double.class;
latitude.setValue(32.806673);
PropertyInfo longitude = new PropertyInfo();
longitude.name="Longitude";
longitude.type=Double.class;
longitude.setValue(-86.791133);
SoapObject results = null;
String methodName = "OffersByLocation";
String actionName = "http://loyalcard.com/LoyalCardWebService/GetOffersByLocation";
SoapObject request = new SoapObject(NAMESPACE,methodName);
request.addProperty(latitude);
request.addProperty(longitude);
Run Code Online (Sandbox Code Playgroud)
这里将纬度和经度值直接传递给OffersByLocation,我应该通过元素Location.请任何人都可以帮助如何通过位置传递参数.
我已尝试过以上程序,但我得到错误说
06-17 11:52:55.934: WARN/System.err(350): SoapFault - faultcode: 'soapenv:Server' faultstring: 'org.apache.axis2.databinding.ADBException: Unexpected subelement Latitude' faultactor: 'null' detail: org.kxml2.kdom.Node@44f6ddc0
Run Code Online (Sandbox Code Playgroud)
请任何人告诉我如何在Soap对象中传递上面的SOAP Request转储?
此致,Srinivas
我的.key文件如:----- BEGIN RSA PRIVATE KEY ----- MIIEpAIBAAKCAQEA1j6eGXbHpqigZ1K // wnuyr5v/L2jFm7dzTtHJx8ZoMQ4CbsG
我的.pem文件如:----- BEGIN CERTIFICATE ----- MIIE4zCCA8ugAwIBAgIDBOziMA0GCSqGSIb3DQEBBQUAMDwxCzAJBgNVBAYTAlVT
我不知道在这里验证了多少步骤.我只想创建一个到IP和端口的ssl套接字,并在该套接字中发送/接收数据.我试图使用键盘,但也许我不太了解它,我总是出错.
请给我一个指南或示例代码.
非常感谢.