gpt4 book ai didi

Java SSL 客户端无自签名证书

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:27 26 4
gpt4 key购买 nike

我需要通过 HTTPS 发送请求。我已经阅读了很多关于 SSL 的文章,Google 上也有很多关于 SSL 的文章,但没有从哪里开始。

我需要通过 HTTPS 连接到网络服务并发送和接收数据。我正在使用 HttpsUrlConnection 发送请求。 Web 服务提供商没有自签名证书,因为这会显示在 Internet Explorer 页面上。该证书由 COMODA High-Assurance Secure Server CA 颁发,但不是自签名的。

如何使用 SSL 连接进行连接、发送和接收数据?请看下面的代码:

public class Sender {

public void send(String endpoint) {
URL url = new URL(endpoint);
HttpsURLConnection httpsUrlConnection = (HttpsURLConnection) url.openConnection();
httpsUrlConnection.setRequestMethod(new String("POST"));
httpsUrlConnection.setDoOutput(true);
httpsUrlConnection.setRequestProperty("Content-Type", "application/xml");
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, getTrustManager(), new SecureRandom());
httpsUrlConnection.setSSLSocketFactory(sc.getSocketFactory());
httpsUrlConnection.connect();
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(httpsUrlConnection.getOutputStream());
outputStreamWriter.write(""); // writes XML data
outputStreamWriter.flush();
outputStreamWriter.close();
InputStreamReader inputStreamReader = new InputStreamReader(httpsUrlConnection.getInputStream());
char i = (char) inputStreamReader.read();
System.out.println(i);
}

public TrustManager[] getTrustManager() {
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {

}

public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
System.out.println("AuthType : " + " " + string);
for(int i = 0; i < xcs.length; i++) {
System.out.println("\t" + xcs[i].getIssuerX500Principal().getName());
System.out.println("\t" + xcs[i].getIssuerDN().getName());
}
}

public X509Certificate[] getAcceptedIssuers() {
return null;
}
}};
return trustAllCerts;

}

我已在以下位置阅读有关 SSL 的信息:http://wpengine.com/support/how-does-all-this-work-https-ssl-certificates-ca-public-and-private-keys-csrs/http://www.instantssl.com/ssl-certificate-products/https.html .

正如我提到的,我没有自签名证书,但我使用了 InstallCert.java。

从上面可以看出,当调用 httpsUrlConnection.getInputStream() 时,我收到以下异常

java.io.IOException: Server returned HTTP response code: 500 for URL: // the URL endpoint
java.io.IOException: Server returned HTTP response code: 500 for URL: https://webaddress.co.uk/Service/services/Service?wsdl // not actual address. I can't give this but this is a sample address
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1459)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
at com.screening.listener.ConnectionListenerBean.send(ConnectionListenerBean.java:191)
at com.screening.listener.ConnectionListenerBean.processMessage(ConnectionListenerBean.java:129)
at com.screening.listener.ConnectionListenerBean.listen(ConnectionListenerBean.java:107)
at com.screening.listener.ConnectionListenerBean.init(ConnectionListenerBean.java:73)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.ejb.containers.interceptors.BeanCallbackInterceptor.intercept(InterceptorManager.java:1006)
at com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:61)
at com.sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.java:109)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCallback(SystemInterceptorProxy.java:133)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.init(SystemInterceptorProxy.java:115)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.ejb.containers.interceptors.CallbackInterceptor.intercept(InterceptorManager.java:961)
at com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:61)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:390)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:373)
at com.sun.ejb.containers.AbstractSingletonContainer.createSingletonEJB(AbstractSingletonContainer.java:518)
at com.sun.ejb.containers.AbstractSingletonContainer.access$100(AbstractSingletonContainer.java:74)
at com.sun.ejb.containers.AbstractSingletonContainer$SingletonContextFactory.create(AbstractSingletonContainer.java:693)
at com.sun.ejb.containers.AbstractSingletonContainer.instantiateSingletonInstance(AbstractSingletonContainer.java:444)
at org.glassfish.ejb.startup.SingletonLifeCycleManager.initializeSingleton(SingletonLifeCycleManager.java:213)
at org.glassfish.ejb.startup.SingletonLifeCycleManager.initializeSingleton(SingletonLifeCycleManager.java:174)
at org.glassfish.ejb.startup.SingletonLifeCycleManager.doStartup(SingletonLifeCycleManager.java:152)
at org.glassfish.ejb.startup.EjbApplication.start(EjbApplication.java:150)
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:126)
at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:241)
at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:236)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:339)
at org.glassfish.kernel.embedded.EmbeddedDeployerImpl.deploy(EmbeddedDeployerImpl.java:214)
at org.glassfish.kernel.embedded.EmbeddedDeployerImpl.deploy(EmbeddedDeployerImpl.java:144)
at org.glassfish.ejb.embedded.EJBContainerImpl.deploy(EJBContainerImpl.java:128)
at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createEJBContainer(EJBContainerProviderImpl.java:120)
at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:102)
at com.screening.Container.createEJBContainer(Container.java:22)
at com.screening.listener.ConnectionListenerBeanTest.setUpClass(ConnectionListenerBeanTest.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:292)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

我做错了什么?有什么要补充的吗?

从 getTrustManager() 控制台打印四个证书。

最佳答案

如果您收到任何描述的 HTTP 错误代码,则证明 SSL 部分工作正常。

这里的问题是 500,它表示服务于您的请求的服务器错误,这与 SSL 无关。您将不得不查看服务器日志以找出导致它的原因。

关于Java SSL 客户端无自签名证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23288319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com