我编写了一个示例Java客户端代码来连接到APNs服务器向我的设备发送推送通知。它在与APNs服务器的安全连接中失败了。有人能帮帮我吗?代码如下:
public class APNSDriver {
public static void main(String[] args) {
APNSDriver.sendSamplePushNotification();
}
static SSLSocketFactory getSSLSocketFactory() {
try {
String keystoreFilename = "D:\\Oracle\\IDCS\\MFA\\APNS\\OMA_prereqs_backup\\iOS_prod.p12";
char[] storepass = "welcome1".toCharArray();
FileInputStream fis = new FileInputStream(
new File(keystoreFilename));
final KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(fis, storepass);
KeyManagerFactory keyManagerFactory = KeyManagerFactory
.getInstance("SunX509");
keyManagerFactory.init(ks, storepass);
TrustManagerFactory trustManagerFactory = TrustManagerFactory
.getInstance("SunX509");
trustManagerFactory.init((KeyStore) null);
// create ssl context
SSLContext sslContext = SSLContext.getInstance("TLS");
// setup the HTTPS context and parameters
sslContext.init(keyManagerFactory.getKeyManagers(),
trustManagerFactory.getTrustManagers(), null);
if (keyManagerFactory != null || trustManagerFactory != null) {
return sslContext.getSocketFactory();
}
} catch (Exception e) {
System.out.println("Unable to create ssl socket factory");
e.printStackTrace();
}
return HttpsURLConnection.getDefaultSSLSocketFactory();
}
private static void sendSamplePushNotification() {
URL url = null;
try {
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
url = new URL("https://api.development.push.appl.com:443");
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(
"www-proxy.us.oracle.com", 80));
HttpsURLConnection conn = (HttpsURLConnection) url
.openConnection(proxy);
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setHostnameVerifier(hv);
conn.setSSLSocketFactory(getSSLSocketFactory());
OutputStream os = conn.getOutputStream();
..........
}
}
它在conn.getoutputstream()
行处失败,出现以下错误:javax.net.ssl.sslhandShakeException:sun.security.validator.validatoreXception:在sun.security.ssl.alerts.getsslException(alerts.java.sslsocketimpl.fatal(sslsocketimpl.java:192),在sun.security.ssl.slsocketimpl.fatalse(handshaker.java:302),在sun.net.www.protocol.https.abstractDelegateHttpSurlConnection.connect(AbstractDelegateHttpSurlConnection.java:185)在sun.net.www.protocol.http.http.http.httpurlConnection.getoutputStream0(httpurlConnection.java:1282)在sun.net.www.protocol.https.httpsurlConnection.getoutputStream(httpurlConnection.java:1257)在mfa.apnsdriver.apnsdriver.main(apnsdriver.java:28)原因:sun.security.validator.validatoreXception:找不到受信任的证书................
您需要有效的证书才能连接到该URL。您可以尝试使用InstallCert.java应用程序(可以从github(https://github.com/escline/installCert)下载)从服务器获取证书,并将其添加到信任存储中。
如果您已经有了一个有效的证书,并且不需要从服务器获取它,只需使用KeyStoreExplorer工具,打开Java>JRE>Security>Lib cacerts文件,并添加您的证书。然后重新启动LocalServer。请确保进行此更改的java文件夹是本地服务器正在使用的JVM。
原因:组件组织。neo4j。内核impl。交易XaDataSourceManager@2a792260'已成功初始化,但无法启动。请参阅随附的原因例外。 CausedBy:组件org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource@23d7c3d2已成功初始化,但无法启动。请参阅附件中的原因异常。 原因:没有架构索引提供程序组织。neo4j。内核应
我正在使用SunPKCS11连接到HSM设备。我有一些运行完美的单元测试(实际上他们会进行一些签名和验证),但是,当我将应用程序部署到tomcat或jetty时,我会得到这个异常(这个异常是在jetty中部署期间引发的,tomcat的异常是相似的): 下面是我如何实例化SunPKCS11的: 只是为了添加一些细节,我在windows server 2012上使用了64位java8。 更新1:我刚刚
我的代码如下。 异常发生在下面给出的第二行。 异常是什么意思?我的代码有什么问题? 由Girish编辑 listener.ora文件: tnsnames.ora 文件: 在上面的示例中,给出了tnsnames.ora和listener.ora文件的内容。
我正在尝试使用hazelcast v3。2.4(服务器和客户端上的版本相同)。服务器(我可以安装的简单实现)正在服务器上运行。客户端尝试连接到远程服务器-服务器打印身份验证请求,但我收到以下日志输出(包括异常)-关于我可以做什么不同的想法(复制日志输出和配置文件)。我正在尝试通过TCP/IP进行连接,我检查了网络连接——我没有看到任何东西阻止连接。 堆栈中提到的代码行: 配置 日志输出 服务器输出
我正在使用asmack-android-16为我的聊天应用程序。有时,在创建连接,我得到SSL异常,然后我无法登录服务器。我的服务器正在对连接使用SSL身份验证。有人能帮帮我吗?我已经挣扎了好几周了 以下是我的连接配置: XMPPConnection连接=new XMPPConnection(连接配置);connection.connect (); // 调用此行会给我异常,尽管已创建连接。 以下
并在握手失败结束时找到“无效”记录器: 从记录器来看,我认为使用的SSL协议版本是TLS1.2,看起来不错。它看起来像密码不匹配-但不确定我是否忽略了什么,以及如何补救这一点。 在进一步检查日志时,发现以下一个错误: