안드로이드의 WebView
컨트롤은 SSL을 지원합니까?Android에서 웹보기가 SSL을 지원합니까?
신뢰할 수있는 SSL 인증서를 사용하는 웹 페이지를로드하려고하지만 WebView
은 흰색입니다.
제안 사항?
안드로이드의 WebView
컨트롤은 SSL을 지원합니까?Android에서 웹보기가 SSL을 지원합니까?
신뢰할 수있는 SSL 인증서를 사용하는 웹 페이지를로드하려고하지만 WebView
은 흰색입니다.
제안 사항?
전문가가 아니며 웹에서 무엇을 찾을 수 있는지. 내가 이해하는 것으로부터, WebView는 실제로 SSL을 지원하지만, 빈 화면은 WebView가 인증서가 유효하다고 생각하지 않는다는 표시입니다. 이것은 자체 서명 한 인증서 나 android에서 설정하지 않은 루트 인증에서 발생합니다 (완벽하게 유효한 인증서는 유효하지 않습니다).
webView.getSetting().setDomStorageEnable(true);
이상한 점은 자체 서명 인증서가 아니라는 것입니다 .. –
흠, 글쎄, 나는 WebView가 확실히 SSL 지원을한다는 것을 알게되었습니다. 여기에는'getCertificate()','clearSslPreferences()'및'setCertificate (SslCertificate certificate)'메소드가 있습니다. 내가보기에는 문제가 무엇인지 웹 키트를 통해 알려주고 있습니다. 주위를 확인해 보면 [this] (http://developer.android.com/reference/android/webkit/SslErrorHandler.html)에서 ssl 오류 처리를 볼 수 있습니다. – chris
@chris 당신은 이것이 사용하는 froyo 또는 그 이상에서 작동한다고하지만, SslErrorHandler와 SslError '모두 유형으로 해석 될 수 없으며 어떤 것도 가져올 수 없습니다 ... 제안 사항이 있습니까? – RyanG
: 어떤 경우에, 당신은 프로 요를 사용하거나하는 경우 더 나은 당신이 뭔가를 시도 할 수 있습니다 업데이트 된 보안 정책에 따라 서버에서 제공 한 인증서가 사용자의 기대에 부합 할 때마다 SslErrorHandler.proceed()를 호출하도록 코드를 변경하고, 그렇지 않으면 SslErrorHandler.cancel()을 호출합니다.
예를 들어, 사용자에게 확인 대화 상자를 추가하여 Google에 더 이상 경고가 표시되지 않는 것 같습니다.
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
String message = "SSL Certificate error.";
switch (error.getPrimaryError()) {
case SslError.SSL_UNTRUSTED:
message = "The certificate authority is not trusted.";
break;
case SslError.SSL_EXPIRED:
message = "The certificate has expired.";
break;
case SslError.SSL_IDMISMATCH:
message = "The certificate Hostname mismatch.";
break;
case SslError.SSL_NOTYETVALID:
message = "The certificate is not yet valid.";
break;
}
message += " Do you want to continue anyway?";
builder.setTitle("SSL Certificate Error");
builder.setMessage(message);
builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.proceed();
}
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
}
});
final AlertDialog dialog = builder.create();
dialog.show();
}
이렇게 변경하면 경고가 표시되지 않습니다. 위의 변경 구글 플레이 내 APK를 접수 한 후
제대로 SSL 인증서 validationoogle 놀이를 처리하는 방법 : 당신은 SSL 기반 웹 사이트를 이용하기 설정 웹보기를 활성화해야
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.SslErrorHandler;
import android.net.http.SslError;
...
engine = (WebView) findViewById(R.id.my_webview);
engine.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
});
정말 고맙습니다. 마치 매력처럼 작동했습니다. +1 –
구글 플레이 내 응용 프로그램을 거부하고 내가 이런 짓을 ...
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
try {
//Get the X509 trust manager from your ssl certificate
X509TrustManager trustManager = mySslCertificate.getX509TrustManager();
//Get the certificate from error object
Bundle bundle = SslCertificate.saveState(error.getCertificate());
X509Certificate x509Certificate;
byte[] bytes = bundle.getByteArray("x509-certificate");
if (bytes == null) {
x509Certificate = null;
} else {
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
Certificate cert = certFactory.generateCertificate(new ByteArrayInputStream(bytes));
x509Certificate = (X509Certificate) cert;
}
X509Certificate[] x509Certificates = new X509Certificate[1];
x509Certificates[0] = x509Certificate;
// check weather the certificate is trusted
trustManager.checkServerTrusted(x509Certificates, "ECDH_RSA");
Log.e(TAG, "Certificate from " + error.getUrl() + " is trusted.");
handler.proceed();
} catch (Exception e) {
Log.e(TAG, "Failed to access " + error.getUrl() + ". Error: " + error.getPrimaryError());
final AlertDialog.Builder builder = new AlertDialog.Builder(WebViewActivity.this);
String message = "SSL Certificate error.";
switch (error.getPrimaryError()) {
case SslError.SSL_UNTRUSTED:
message = "The certificate authority is not trusted.";
break;
case SslError.SSL_EXPIRED:
message = "The certificate has expired.";
break;
case SslError.SSL_IDMISMATCH:
message = "The certificate Hostname mismatch.";
break;
case SslError.SSL_NOTYETVALID:
message = "The certificate is not yet valid.";
break;
}
message += " Do you want to continue anyway?";
builder.setTitle("SSL Certificate Error");
builder.setMessage(message);
builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.proceed();
}
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
}
});
final AlertDialog dialog = builder.create();
dialog.show();
}
}
는
그리고 당신의 SSL 트러스트 매니저를 생성 pls는이 answer
을 확인정말 고마워요 :) 해결책에 너무 가깝고 끝까지 도와주었습니다. :) – Viktor
@Viktor Welcome mate :) –
Internet-Application의 빌드로 웹 페이지를 열 수 있습니까? – Mannaz