我正在做一个https帖子,我得到ssl异常的例外不可信服务器证书.如果我做正常的http它工作得很好.我必须以某种方式接受服务器证书吗?
如何在Android上接受Java中的自签名证书?
代码示例将是完美的.
我在互联网上随处可见,虽然有些人声称已找到解决方案,但它要么不起作用,要么没有示例代码来支持它.
对于我的应用程序Transdroid,我通过HTTP连接到远程服务器,并可选择通过HTTPS安全地连接.对于与HttpClient的这些HTTPS连接,我使用自定义SSL套接字工厂实现来确保自签名证书正常工作.基本上,我接受一切,并忽略任何证书的每一次检查.
这已经有一段时间了,但它不再适用于Android 2.2 FroYo.尝试连接时,它将返回一个异常:
java.io.IOException: SSL handshake failure: I/O error during system call, Broken pipe
Run Code Online (Sandbox Code Playgroud)
以下是我初始化HttpClient的方法:
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", new PlainSocketFactory(), 80));
registry.register(new Scheme("https", (trustAll ? new FakeSocketFactory() : SSLSocketFactory.getSocketFactory()), 443));
client = new DefaultHttpClient(new ThreadSafeClientConnManager(httpParams, registry), httpParams);
Run Code Online (Sandbox Code Playgroud)
我使用了FakeSocketFactory和FakeTrustManager,其源代码可以在这里找到.
同样,我不明白为什么它突然停止工作,甚至错误'破管'的意思.我在Twitter上看到过Seesmic和Twidroid在FroYo上启用SSL时失败的消息,但我不确定它是否相关.
感谢您的任何指示/帮助!
我需要做的就是从具有自签名SSL证书的Web服务器下载一些基于文本的基本文件和图像文件.
我一直试图弄清楚如何使用HttpClient来做到这一点,但让SSL工作是一场噩梦,这对于这么简单的任务来说似乎太麻烦了.
有没有更好的方法来执行这些文件下载?也许通过WebView或浏览器功能?重新制作一个简单的HTTPS GET请求是一个很大的痛苦,并且显着地阻碍了我的开发计划.
我正在尝试从我的Android应用程序连接到基于node.js的TLS服务器.当然它失败了因为我使用的是自签名证书.
无论如何我可以将证书添加到我的应用程序并让Android以某种方式信任它吗?注意,我没有使用HTTPS,这是一个TLS over TCP连接.
我通过https从我的Android客户端调用Web服务.我必须验证从服务器端接收的证书.我怎么做 ?目前这是我用来调用Web服务的代码.
private static String SendPost(String url, ArrayList<NameValuePair> pairs) { // url = "https://....."
errorMessage = "";
String response = "";
DefaultHttpClient hc=new DefaultHttpClient();
ResponseHandler <String> res=new BasicResponseHandler();
HttpPost postMethod=new HttpPost(url);
try {
postMethod.setEntity(new UrlEncodedFormEntity(pairs));
response = hc.execute(postMethod, res);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
Run Code Online (Sandbox Code Playgroud)
如何在执行发布期间验证从服务器收到的自签名证书?我必须通过公钥/私钥进行测试.客户端将拥有一个CA文件.我需要客户端使用CA验证服务器证书,该服务是公共的.这与公钥/私钥有关.如何在致电帖子之前从服务器接收证书?
它们是stackoverflow上提供的几个选项和代码片段.我找到的多个链接的多个链接是: 在Android上接受HTTPs证书以及 使用Android和自签名服务器证书的HTTPS GET(SSL)
但我无法弄清楚哪些对我来说是好的/适用的!我不想禁用所有或接受任何.必须检查公钥/私钥/
任何帮助都非常感谢.
我是Android新手,我很难为Android应用程序调用SSL Web服务.我的代码如下:
Log.v("fs", "Making HTTP call...");
HttpClient http = new DefaultHttpClient();
HttpGet request = new HttpGet("https://example.com/api");
try {
String response = http.execute(request, new BasicResponseHandler());
Log.v("fs", response);
} catch (Exception e) {
Log.v("fs", e.toString());
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Making HTTP call...
javax.net.SSLPeerUnverifiedException: No peer certificate
Run Code Online (Sandbox Code Playgroud)
任何使这项工作的建议都会很棒.
我应该注意,这是一个有效的证书.它由官方CA签署.
我正在尝试使用 Apache 的 HttpClient 4.X 从 Android 应用程序查询 HTTPS 网站。我得到一个javax.net.ssl.SSLPeerUnverifiedException: No peer certificate例外。我按照不同的说明导入证书:
这些都不适合我。
我认为我的问题是该站点的证书链如下:
所述电信根CA 2被包括在Android默认密钥库(/system/etc/security/cacerts.bks)。我在自己用于测试的手机上检查了这一点。
现在的问题是,我必须在自定义密钥库中包含所有说明告诉我提供哪些证书?只是中间件?只有网站吗?两个都?我也需要根证书吗?不Site's certificate应该由链验证 - 我不需要提供任何额外的证书,因为链的根是可信的。
如果您能向我解释发生了什么以及我如何使其发挥作用,我会很高兴。请不要发布忽略证书的解决方法,因为这是用于生产并且必须是安全的。
我开发了一个演示 android 应用程序,它使用安全的 websocket 协议连接到在线服务器。并且在开始连接时出现“未找到认证路径的信任锚”错误。我搜索了这个错误,只找到了相关的 HTTPS,我不知道如何在 websocket (wss) 中开发。
我将Autobahn-SW库用于 websocket。
代码在这里(在我的活动类中):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final WebSocketConnection mConnection = new WebSocketConnection();
final String wsuri = "wss://myserver_url";
try {
mConnection.connect(URI.create(wsuri), new WebSocketConnectionObserver() {
@Override
public void onOpen() {
System.out.println("onOpend----> sending msg...");
mConnection.sendTextMessage("hello");
}
@Override
public void onClose(WebSocketCloseNotification code, String reason) {
System.out.println("onClosed---> " + reason);
}
@Override
public void onTextMessage(String payload) {
System.out.println("onTextmessage---> " + payload);
}
@Override
public void onRawTextMessage(byte[] payload) …Run Code Online (Sandbox Code Playgroud) 关于AndroidHttpClient的信息很少,特别是我找不到任何好的例子.从我读到的 - 我可以使用此客户端,它已预先配置为SSL.我的目标是2.2+,所以它对我很有用.
谢谢!
我自己的答案(见下面的代码).
我的应用程序单例版本.请参阅顶部的注释,详细了解我用于生成所有内容的命令行.始终使用相同的密码以确保其有效.PKS文件密码必须匹配.
import android.net.http.AndroidHttpClient;
import android.app.Application;
import android.util.Log;
import idatt.mobile.android.providers.DBLog;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import java.io.InputStream;
import java.security.KeyStore;
/*
To generate PKS:
1. Created cert in IIS7 and then exported as pfx. Follow instruction on SelfSSL: http://www.robbagby.com/iis/self-signed-certificates-on-iis-7-the-easy-way-and-the-most-effective-way/
1a. Download tool: http://cid-3c8d41bb553e84f5.skydrive.live.com/browse.aspx/SelfSSL
1b. Run: SelfSSL /N:CN=mydomainname /V:1000 /S:1 /P:8081
I use port 8081 on my server
1c. Export from IIS manager to cert.pfx
2. Run command …Run Code Online (Sandbox Code Playgroud) android ×10
ssl ×6
java ×3
certificate ×2
self-signed ×2
download ×1
httpclient ×1
https ×1
web-services ×1
websocket ×1