我的应用程序在Google Play中被拒绝了,因为TrustManager的一些不安全的实现。
但是在我的库中,我只有TrustManager的一个实现(这是我的SSLUtil类)。
import android.content.Context;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;
public class SSLUtil {
/**
* @param ctx
* @param certRaw File from /res/raw
* @return
* @throws Exception
*/
public static SSLSocketFactory trustCert(Context ctx, int certRaw) throws Exception {
// Load CAs from an InputStream
CertificateFactory cf = CertificateFactory.getInstance("X.509");
// File at /res/raw
InputStream caInput = FileUtils.readRawFile(ctx, certRaw);
Certificate ca;
try {
ca = cf.generateCertificate(caInput);
} finally {
caInput.close();
}
// Create a KeyStore containing our trusted CAs
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
// Log.d(TAG, "KeyStore: " + keyStore);
// Create a TrustManager that trusts the CAs in our KeyStore
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
// Create an SSLContext that uses our TrustManager
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
// Create all-trusting host name verifier
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
SSLSocketFactory socketFactory = context.getSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory(socketFactory);
return socketFactory;
}
}
我不明白为什么我的申请被拒绝了。
不,您的代码不安全。从名称allhostsvalid
中可以看出,代码盲目地接受所有主机名,这意味着连接可以是中间人连接。您应该删除该类。
Google建议我在Android应用程序中有一个不安全的X509TrustManager接口实现,需要更改代码如下: 若要正确处理SSL证书验证,请更改自定义X509TrustManager接口的checkServerTrusted方法中的代码,以便在服务器提供的证书不符合预期时引发CertificateException或IllegalArgumentException。对于技术问题,您可以p
文档中说
谷歌正在取消不太安全的应用程序访问功能。我正在为我的网站的联系人页面使用smtp电子邮件服务。但在2022年5月30日之后,这项服务可能无法工作。 有没有其他方法可以让第三方不太安全的应用程序访问我的Gmail帐户。。? 应用程序密码能解决这个问题吗...?我怀疑设置应用程序密码也不会提供访问权限,因为谷歌表示这可能不适用于不太安全的应用程序。 那么有什么方法可以解决这个问题,以便smtp电子邮件
我使用下面的firebase rest API访问firestore数据库数据 为了访问我的firestore数据库,我在关键部分使用了我的访问令牌,但我收到了来自firebase的电子邮件,称“[firebase]您的云firestore数据库有不安全的规则”。直到那时,我才发现任何人都可以访问我的数据库数据,即使没有有效的访问令牌 谢谢
TL;DR 每次localhost:4200(通过cors过滤器)都会发出超文本传输协议请求localhost:8080它会丢失持有身份验证的会话范围bean,这基本上会使403的所有调用失败。不包括第一个超文本传输协议请求(它不支持Spring安全) 我有一个Spring Boot应用程序,它在localhost:8080中运行良好。我们正在其内部创建一个角度iframe,它也可以很好地工作(当