- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用自定义 DummySocketFactory 和 DummyTrustMAnager 通过 TLS 连接到 smtp。虚拟套接字工厂:
package XMailMessenger;
public class DummySSLSocketFactory extends SSLSocketFactory {
private SSLSocketFactory factory;
public DummySSLSocketFactory() {
try {
SSLContext sslcontext = SSLContext.getInstance("TLS");
//Security.removeProvider("SunJSSE");
sslcontext.init(null,
new TrustManager[] { new DummyTrustManager()},
null );
factory = (SSLSocketFactory)sslcontext.getSocketFactory();
} catch(Exception ex) {
System.out.println(ex.toString());
}
}
public static SocketFactory getDefault() {
SocketFactory a = new DummySSLSocketFactory();
if ( a == null ) { System.out.println("1"); }
return a;
}
...
虚拟信任管理器:
public class DummyTrustManager implements X509TrustManager{
public void checkClientTrusted(X509Certificate[] cert, String authType) {
// everything is trusted
}
public void checkServerTrusted(X509Certificate[] cert, String authType) {
// everything is trusted
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
//return null;
}
}
在发送电子邮件时,我收到主题中的异常,此异常来自 DummySSLSocketFactory 中的函数 sslcontext.init。我调试它并注意到,在代码中:
private X509TrustManager chooseTrustManager(TrustManager[] tm)
throws KeyManagementException {
// We only use the first instance of X509TrustManager passed to us.
for (int i = 0; tm != null && i < tm.length; i++) {
if (tm[i] instanceof X509TrustManager) {
if (SunJSSE.isFIPS() &&
!(tm[i] instanceof X509TrustManagerImpl)) {
throw new KeyManagementException
("FIPS mode: only SunJSSE TrustManagers may be used");
}
if (tm[i] instanceof X509ExtendedTrustManager) {
return (X509TrustManager)tm[i];
} else {
return new AbstractTrustManagerWrapper(
(X509TrustManager)tm[i]);
}
}
}
// nothing found, return a dummy X509TrustManager.
return DummyX509TrustManager.INSTANCE;
}
异常发生在 if (SunJSSE.isFIPS() && !(tm[i] instanceof X509TrustManagerImpl)) 表达式。
我想 tm[i] 包含我的 DummyTrustManager ,它不能从 X509TrustManagerImpl 扩展所以我的问题是:如何在 SunJSSE 中禁用 Fips?
最佳答案
SunJSSE 可以配置为在 FIPS-140 兼容模式下运行,只要它使用 FIPS-140 认证的加密硬件或软件供应商来实现 JSSE 所需的所有加密算法(例如网络安全服务 – NSS、Sun 加密加速器) 6000、nCipher 等)。
要启用 FIPS 模式,请编辑文件 ${java.home}/lib/security/java.security 并修改列出 com.sun.net.ssl.internal.ssl.Provider 的行并将FIPS-140 加密提供程序(例如 SunPKCS11-NSS)。提供者的名称是一个字符串,它将前缀 SunPKCS11- 与其配置文件中指定的 PKCS#11 提供者的名称连接起来。
security.provider.4=com.sun.net.ssl.internal.ssl.Provider SunPKCS11-NSS
如果使用 NSS 作为加密软件 token (使用 NSS 3.1.1. 或更高版本),假设库位于/opt/nss/lib 目录及其 key 数据库文件(后缀为 .db )在/opt/nss/fipsdb目录下,代表NSS的示例配置如下:
# Use NSS as a FIPS-140 compliant cryptographic token
# SunPKCS11-NSS
name = NSS
nssLibraryDirectory = /opt/nss/lib
nssSecmodDirectory = /opt/nss/fipsdb
nssModule = fips
在FIPS模式下,SunJSSE将执行基于SSL/TLS 1.0的通信和密码操作,包括对称和非对称加密、签名生成和验证、消息摘要和消息认证码、 key 生成和 key 派生、随机数生成等。
关于java - key 管理异常 : FIPS mode: only SunJSSE TrustManagers may be used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19535626/
我如何在 grails 中使用以下代码—— TrustManager[] trustAllCerts = new TrustManager[]{ new X509Tru
我正在尝试创建一个 TrustManagers 数组,其中填充了从 Base64 编码的 PEM 字符串解码的 CA 证书,以便在 SSLSocketFactory 中传递它。这是我的代码: publ
我正在围绕我们内部使用的一些其余 Web 服务构建一个小型包装器 Java 类。我们使用安全的 HTTPS 连接。通常,SSL 只允许受信任的证书。我希望包装类的用户能够将 X509Certifica
我正在努力使我的 Android 应用程序符合 Android 的新政策,即根据此 requirement and instructions 拥有安全应用程序. 1) 我首先将 SSL 和 https
我想将自定义信任管理器分配给特定的 org.apache.axis.client.Call。对于 Java 中的常规 HTTP 客户端,我只需创建一个 SSLContext 和 TrustManage
在什么情况下会在 Java 中使用 HostnameVerifier 而不是 TrustManager?一个比另一个推荐吗?查看 Java 文档(Interface HostnameVerifier
我试图找出 HTTPS 连接中使用的 TrustManager 和 keyManager 之间的区别。如果发布了相同的引用资料,那将会很有帮助,因为我无法获得正确的信息。 谢谢和问候,苏伦达尔 最佳答
在我们的应用程序中,当应用程序与服务器通信时,我会额外检查证书(公钥固定)(针对 MITMA)。为了与服务器通信,我使用 HttpClient。另外我在生产中有一些代理服务器,所以我需要使用 SNI。
在我的项目使用 1.4.0.M3 版本的 Spring Boot 前几周,它使用 tomcat-embedded-core-8.0.33。在这里,我能够使用以下代码创建多连接器: @Bean Embe
我有一个要求,可以提供一个中间 CA 来信任,但不能提供签署它的 CA。并将其用作信任库,我希望能够信任具有由该中间 CA 签名的证书的 SSL 服务器。默认实现是期望构建整个链,直到找到受信任的自签
我已经阅读了很多关于设置我的 SSL 客户端/服务器系统(无 HTTP)的资料。 我的灵感来自 the secure chat example和 the websocket ssl server ex
在开发者控制台中我的应用名称旁边看到了来自 Google 的警告,内容涉及 TrustManager 的不安全实现。我浏览了代码,但没有使用 TrustManager 或 checkServerTru
在 Mac 上的 Eclipse 4.3.2 Java 1.7 中调试某些代码时,我出现了非常奇怪的行为。 我有一些库(没有源代码),可能定义它自己的TrustManager(我的猜测)。当在调试期间
我正在尝试在 IBM 云 VM (Ubuntu 18) 上启动一个 spring 应用程序。我使用的命令是 java -jar application.jar。它使用 spring 数据和 SSL 证
我正在尝试使用以下代码绕过证书: private static HttpClient wrapClient(HttpClient base) 抛出 AGException { 尝试 { SSLCont
在我当前基于 netty (3.5.2) 的服务器中 I am able to ask the client for a certificate using TLS renegotiation .根据
对 keystore 和信任库使用 KeyStore 对象有什么区别?而不是使用 KeyManager 和 TrustManager? 让我解释一下我为什么要问。我正在使用 RESTEasy,需要使用
首先我不得不承认,我知道接受所有证书可以被认为是没有安全性的。我们有“真正的”证书,但只在我们的实时系统上。我们测试系统上的证书是自签名的。所以只要我们在开发,我们就必须使用测试服务器,这迫使我禁用证
我一直在尝试使用 apache HttpClient 库注册我的自定义 TrustManger。以下链接包含有关如何执行此操作的说明:Https Connection Android 不幸的是,我想使
我有一个与 HTTPS RPC 通信的应用程序。 HTTP 服务器正在使用 CAcert 签名证书。 我正在使用自定义 TrustManager 来验证证书。 因为我不能确定,CAcert 包含在所有
我是一名优秀的程序员,十分优秀!