针对android的带SSL的Https请求
对于android开发,如何使用SSL证书发送https请求?针对android的带SSL的Https请求,android,Android,对于android开发,如何使用SSL证书发送https请求?>尝试使用TrustManagerImpulator类: > Try using TrustManagerManipulator Class: try { TrustManagerManipulator.allowAllSSL(); try {
>尝试使用TrustManagerImpulator类:
> Try using TrustManagerManipulator Class:
try {
TrustManagerManipulator.allowAllSSL();
try {
SoapObject request = new SoapObject(Data.NAMESPACE,
methodName);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
if (methodName.equals(Data.DOPAYMENT))
{
request.addProperty("firstname", param1);
request.addProperty("lastName", param2);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
envelope.env = "http://schemas.xmlsoap.org/soap/envelope/";
TrustManagerManipulator.allowAllSSL();
System.setProperty("http.keepAlive", "false");
HttpTransportSE androidHttpTransport = new HttpTransportSE(
Data.URL_BASE);
androidHttpTransport
.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
try {
androidHttpTransport.call(Data.SOAP_ACTION,
envelope);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(context, "Network failed!",
Toast.LENGTH_LONG).show();
dismissDialog();
}
SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
String responseLocal = resultsRequestSOAP.toString();
responseXML = (String) resultsRequestSOAP
.getProperty(0);
Log.v("responseXML0::", "" + responseXML);
Log.v("responseSTR", "" + responseLocal);
///////////////////////////////////
> TrustManagerManipulator Class
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class TrustManagerManipulator implements X509TrustManager {
private static TrustManager[] trustManagers;
private static final X509Certificate[] acceptedIssuers = new X509Certificate[] {};
public boolean isClientTrusted(X509Certificate[] chain) {
return true;
}
public boolean isServerTrusted(X509Certificate[] chain) {
return true;
}
public static void allowAllSSL()
{
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
SSLContext context = null;
if (trustManagers == null) {
trustManagers = new TrustManager[] { new TrustManagerManipulator() };
}
try {
context = SSLContext.getInstance("TLS");
context.init(null, trustManagers, new SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
HttpsURLConnection.setDefaultSSLSocketFactory(context
.getSocketFactory());
}
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return acceptedIssuers;
}
}
试一试{
trustmanagermaniplator.allowAllSSL();
试一试{
SoapObject请求=新的SoapObject(Data.NAMESPACE,
方法名称);
SoapSerializationEnvelope=新的SoapSerializationEnvelope(
第11版);
if(methodName.equals(Data.DOPAYMENT))
{
request.addProperty(“firstname”,param1);
request.addProperty(“lastName”,param2);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
envelope.env=”http://schemas.xmlsoap.org/soap/envelope/";
trustmanagermaniplator.allowAllSSL();
set属性(“http.keepAlive”、“false”);
HttpTransportSE androidHttpTransport=新HttpTransportSE(
数据。URL(U库);
androidHttpTransport
.setXmlVersionTag(“”);
试一试{
androidHttpTransport.call(Data.SOAP\u操作,
信封);
}捕获(例外e){
e、 printStackTrace();
Toast.makeText(上下文“网络失败!”,
Toast.LENGTH_LONG).show();
dismissDialog();
}
SoapObject resultsRequestSOAP=(SoapObject)envelope.bodyIn;
String responseLocal=resultsRequestSOAP.toString();
responseXML=(字符串)resultsRequestSOAP
.getProperty(0);
Log.v(“responseXML0::”,“”+responseXML);
Log.v(“responsest”和“+responseLocal”);
///////////////////////////////////
>TrustManagerImpulator类
导入java.security.KeyManagementException;
导入java.security.NoSuchAlgorithmException;
导入java.security.SecureRandom;
导入java.security.cert.CertificateException;
导入java.security.cert.x509证书;
导入javax.net.ssl.HostnameVerifier;
导入javax.net.ssl.HttpsURLConnection;
导入javax.net.ssl.SSLContext;
导入javax.net.ssl.SSLSession;
导入javax.net.ssl.TrustManager;
导入javax.net.ssl.X509TrustManager;
公共类TrustManager安装程序实现X509TrustManager{
私有静态信任管理器[]信任管理器;
私有静态最终X509Certificate[]acceptedIssuers=新X509Certificate[]{};
公共布尔值IsClient受信任(X509Certificate[]链){
返回true;
}
公共布尔值isServerTrusted(X509Certificate[]链){
返回true;
}
公共静态void allowAllSSL()
{
HttpsURLConnection.setDefaultHostnameVerifier(新的HostnameVerifier(){
公共布尔验证(字符串主机名、SSLSession会话){
返回true;
}
});
SSLContext context=null;
if(trustManagers==null){
trustManagers=new TrustManager[]{new trustmanagermaniplator()};
}
试一试{
context=SSLContext.getInstance(“TLS”);
init(null,trustManagers,new SecureRandom());
}捕获(无算法异常){
e、 printStackTrace();
}捕获(密钥管理异常e){
e、 printStackTrace();
}
HttpsURLConnection.setDefaultSSLSocketFactory(上下文
.getSocketFactory());
}
public void checkClientTrusted(X509Certificate[]链,字符串authType)
抛出证书异常{
}
public void checkServerTrusted(X509Certificate[]链,字符串authType)
抛出证书异常{
}
公共X509证书[]getAcceptedIssuers(){
退货承兑人;
}
}
如果你不介意的话,你可以问谷歌吗?我们可以发送请求而不从客户端添加密钥吗?这意味着大多数实现都说使用证书文件生成密钥库。如果没有,还有什么方法吗?/是的,有一个代码可以用于发送http请求。请查看。在这里你可以找到你的解决方案。