- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用相同的 keystore 连接客户端和服务器。客户端套接字可以获得对等证书,而服务器套接字无法获得对等证书但端口。获取证书失败,报SSLPeerUnverifiedException异常。修改问题困扰了我好几天,请帮忙解决,谢谢
我的android代码如下:
客户:
java.security.Security.addProvider(
new org.bouncycastle.jce.provider.BouncyCastleProvider());
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(getKeyManagers(), {new DummyTrustManager()}, null);
SocketFactory socketFactory = sslcontext.getSocketFactory();
SSLSocket socket = (SSLSocket) socketFactory.createSocket("127.0.0.1", 8080);
socket.getSession().getLocalCertificates();
socket.getSession().getPeerHost();
socket.getSession().getPeerPort();
socket.getSession().getPeerCertificates();`
服务器:
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(getKeyManagers(), {new DummyTrustManager()}, null);
ServerSocketFactory mFactory = sslcontext.getServerSocketFactory();
ServerSocket serverSocket =mFactory.createServerSocket(8080);
SSLSocket clientSocket = serverSocket.accept();
socket.getSession().getLocalCertificates();
socket.getSession().getPeerHost();
socket.getSession().getPeerPort();
socket.getSession().getPeerCertificates();`
信任管理器:
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
public class DummyTrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) {
// Does not throw CertificateException: all chains trusted
return;
}
public void checkServerTrusted(X509Certificate[] chain, String authType) {
// Does not throw CertificateException: all chains trusted
return;
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
keystore :
public void initializeKeyStore(String id) {
try {
Log.v(LOG_TAG, "Generating key pair ...");
KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA");
KeyPair keyPair = kg.generateKeyPair();
Log.v(LOG_TAG, "Generating certificate ...");
String name = getCertificateName(id);
X509Certificate cert = SslUtil.generateX509V3Certificate(keyPair, name);
Certificate[] chain = {cert};
Log.v(LOG_TAG, "Adding key to keystore ...");
mKeyStore.setKeyEntry(
LOCAL_IDENTITY_ALIAS, keyPair.getPrivate(), null, chain);
Log.d(LOG_TAG, "Key added!");
} catch (GeneralSecurityException e) {
throw new IllegalStateException("Unable to create identity KeyStore", e);
}
store(mKeyStore);}
public synchronized KeyManager[] getKeyManagers()
throws GeneralSecurityException {
if (mKeyStore == null) {
throw new NullPointerException("null mKeyStore");
}
KeyManagerFactory factory =
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
factory.init(mKeyStore, "".toCharArray());
return factory.getKeyManagers();
证书:
public static X509Certificate generateX509V3Certificate(KeyPair pair,
String name) throws GeneralSecurityException {
Calendar calendar = Calendar.getInstance();
calendar.set(2009, 0, 1);
Date notBefore = new Date(calendar.getTimeInMillis());
calendar.set(2099, 0, 1);
Date notAfter = new Date(calendar.getTimeInMillis());
BigInteger serialNumber = BigInteger.valueOf(Math.abs(
System.currentTimeMillis()));
return generateX509V3Certificate(pair, name, notBefore, notAfter,
serialNumber);
public static X509Certificate generateX509V3Certificate(KeyPair pair,
String name, Date notBefore, Date notAfter, BigInteger serialNumber)
throws GeneralSecurityException {
java.security.Security.addProvider(
new org.bouncycastle.jce.provider.BouncyCastleProvider());
X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();
X509Name dnName = new X509Name(name);
certGen.setSerialNumber(serialNumber);
certGen.setIssuerDN(dnName);
certGen.setSubjectDN(dnName); // note: same as issuer
certGen.setNotBefore(notBefore);
certGen.setNotAfter(notAfter);
certGen.setPublicKey(pair.getPublic());
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
certGen.addExtension(X509Extensions.BasicConstraints, true,
new BasicConstraints(false));
certGen.addExtension(X509Extensions.KeyUsage, true, new KeyUsage(KeyUsage.digitalSignature
| KeyUsage.keyEncipherment | KeyUsage.keyCertSign));
certGen.addExtension(X509Extensions.ExtendedKeyUsage, true, new ExtendedKeyUsage(
KeyPurposeId.id_kp_serverAuth));
AuthorityKeyIdentifier authIdentifier = createAuthorityKeyIdentifier(
pair.getPublic(), dnName, serialNumber);
certGen.addExtension(X509Extensions.AuthorityKeyIdentifier, true,
authIdentifier);
certGen.addExtension(X509Extensions.SubjectKeyIdentifier, true,
new SubjectKeyIdentifierStructure(pair.getPublic()));
certGen.addExtension(X509Extensions.SubjectAlternativeName, false, new GeneralNames(
new GeneralName(GeneralName.rfc822Name, "googletv@test.test")));
// This method is deprecated, but Android Eclair does not provide the
// generate() methods.
X509Certificate cert = certGen.generateX509Certificate(pair.getPrivate(), "BC");
return cert;
enter code here
最佳答案
您可能需要调用 SSLServerSocket.setNeedClientAuth()
让服务器端要求客户端身份验证。客户端随后将发送其证书,您应该能够使用 getPeerCertificates()
获取它。
引用:
关于android - 服务器中没有客户端证书的 SSLPeerUnverifiedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10006070/
当我们尝试从 zuul 访问安全 https REST 点时,出现以下异常。 2017-10-27 08:26:08.499 DEBUG 15708 --- [http-nio-9092-exec-1
当我们尝试从 zuul 访问安全 https REST 点时,出现以下异常。 2017-10-27 08:26:08.499 DEBUG 15708 --- [http-nio-9092-exec-1
我刚开始接触 API(官方和非官方),我正在使用一个名为 JavaSnap 的 API。 。我一直在搞乱示例代码的非常基本的实现,但遇到了错误。这是非常基本的代码: Snapchat snapchat
OkHttp 3.3.1 出现以下异常 javax.net.ssl.SSLPeerUnverifiedException: Hostname xxx not verified: certificate
我正在尝试使用相同的 keystore 连接客户端和服务器。客户端套接字可以获得对等证书,而服务器套接字无法获得对等证书但端口。获取证书失败,报SSLPeerUnverifiedException异常
我正在尝试使用 OkHttp 库向带有一些 url 参数的 API 发送 post 请求。正在关注this blog post到目前为止我有这段代码: public String okHttp
我想在本地系统中运行代码时向 url 发出 xml 请求它运行良好我已经创建了一个 war 文件并将其部署在服务器中,但是在服务器中运行时出现异常 'javax.net.ssl.SSLPeerUnve
我在 Fabric 上遇到以下异常: Non-fatal Exception: javax.net.ssl.SSLPeerUnverifiedException: Hostname assets.do
使用 Apache HttpClient 4.2.1。使用从基于表单的登录示例中复制的代码 http://hc.apache.org/httpcomponents-client-ga/examples
我有一个应用程序可以通过 https 与我拥有的服务器进行交互。我有一个有效的证书。 该应用程序适用于大多数用户,但一些用户报告说他们在连接已获得 root 权限的设备时遇到问题。他们还报告了 HTC
例如,我正在连接谷歌:( https://finance.google.com/finance?q=NASDAQ%3AAAPL ) 和 android okhttp 客户端,但它抛出错误: javax
我正在尝试使用自签名证书测试安全的 http 连接...仅用于开发目的。但是我一直无法解决 peer not authenticated 异常,当然我已经看过关于这个异常的类似帖子,下面是我正在使用的
我正在尝试为默认和自定义 keystore 向 TLS 服务器发送一个帖子。在执行执行时获得 CloseableHttpClient 实例后 CloseableHttpResponse respons
使用 Apache HttpClient 4.2.1。使用从基于表单的登录示例中复制的代码 http://hc.apache.org/httpcomponents-client-ga/examples
又是 SSLPeerUnverified 的沉闷问题,但我没有使用自签名证书。我尝试使用 https 连接到主机。此主机具有正确的证书,Firefox 和 HttpsUrlConnection 都没有
当我尝试使用 HTTPs 连接进行连接时,出现 SSL Peer Unverified Exception。我是 HTTP 的新手。我的代码是: HostnameVerifier hostnameVe
我们有一个与 https 服务器通信的 Android 应用程序。在架构团队更改服务器上的 https 证书之前,一切正常。现在,当用户尝试登录时,它将返回以下错误: javax.net.ssl.SS
我在网上阅读了很多主题,主要是关于堆栈溢出。我仍然无法让我的代码正常工作。我仍然得到:Android sslpeerunverifiedexception no peer certificate 这是
我已经创建了一个自签名的 SSL 证书用于测试目的。当我从浏览器打开 https://localhost 时它工作正常,现在我正在关注 this在 Android 中添加我自己的 TrustManag
这篇文章是 Worklight 中以下文章的延续: https://www.ibm.com/developerworks/forums/thread.jspa?threadID=470764 正如 I
我是一名优秀的程序员,十分优秀!