Tag: ssl

如何在Java中使用TLSV1或SSLV3进行第一次握手(Client Hello)?

当我执行以下代码时,为什么第一次握手是SSLv2,而不是TLSv1或SSLv3? 如何在Java中使用TLSV1或SSLV3进行首次握手? String host = “www.google.com”; String url = “/adsense/?sourceid=aso&subid=ZH_CN-ET-AS-ADSBY6&medium=link&hl=zh_CN”; SSLContext ctx = SSLContext.getInstance(“TLS”); ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom()); SSLContext.setDefault(ctx); SSLSocketFactory factory = ctx.getSocketFactory(); Socket socket = factory.createSocket(host, 443); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out.write(“GET ” + url + ” HTTP/1.0″); out.flush(); out.close(); in.close();

Java SSL / TLS忽略过期的证书? (java.security.cert.CertPathValidatorException:时间戳检查失败)

我遇到了一个与我通过SSL沟通的api的问题。 我认为由于SSL证书已过期这一事实即将发生。 问题是我不管理API框。 是否可以忽略过期的证书? 例外: [ERROR,TaacWorkshop] Problem deleting user group from CADA: org.apache.thrift.transport.TTransportException: javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: timestamp check failed at org.apache.thrift.transport.TIOStreamTransport.flush(TIOStreamTransport.java:156) at company.oss.thrift.cada.CADABackend$Client.send_DeleteUserGroup(CADABackend.java:580) at company.oss.thrift.cada.CADABackend$Client.DeleteUserGroup(CADABackend.java:568) at com.cable.company.nse.cada.CadaDao.deleteUserGroup(CadaDao.java:72) at com.cable.company.nse.taac.business.TaacWorkshop.deleteTaac(TaacWorkshop.java:127) at com.cable.company.nse.taac.controller.RemoteVendorAccessController.processRequest(RemoteVendorAccessController.java:130) at com.cable.company.nse.taac.controller.RemoteVendorAccessController$$FastClassByCGLIB$$63639bdf.invoke() at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191) at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:692) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:67) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625) at […]

安全和validation使用REST的iPhone应用程序的最佳安全框架?

我构建了一个iPhone应用程序,它通过REST Web服务(Jersey)通过JSON对象将数据传输到Java中间层后端… 问题(S): (1)确保此iPhone应用程序的登录/身份validation的最佳方法是什么? (2)是否有用于获取此类function的开源或商业框架? 到目前为止,我遇到了OAuth,SAML和REST身份服务 (3)这个框架是否需要SSL? (4)它是否validation客户端(而不仅仅是用户)? (5)我是以错误的方式来做这件事的吗? 我应该使用每个REST调用所需的加密令牌并安装SSL吗? 如果有人理解我的困境并且可以提供帮助,我将非常感激…我知道这可以在iPhone应用程序上以某种方式完成,因为美国银行和亚马逊拥有相同类型的登录function和安全性。 编码愉快, 麦克风

SSL和SocketChannel

理想情况下,我只需要一个简单的SSLSocketChannel 。 我已经有一个组件可以在普通的SocketChannel上读取和写入消息,但是对于其中一些连接,我必须通过线路使用SSL; 但是,这些连接上的操作是相同的。 有谁知道免费的SSLSocketChannel实现(使用适当的选择器)或类似的东西? 我发现了这个 ,但选择器不接受它,因为它的供应商不是SUN。 我正在通过一个简单的对象将read_from / writing_to网络逻辑从网络数据的插入和检索中解耦,以便使用SSLEngine而不会生气,但考虑到我不这样做,实现它是非常棘手的。知道SSL协议的内部……

如何接受JNDI / LDAP连接的自签名证书?

我需要通过SSL连接到LDAP目录。 在非生产环境中,我们使用自签名证书,当然,这些证书无法通过以下方式validation: javax.naming.CommunicationException: simple bind failed: ldapserver:636 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target] at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:197) at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2694) at com.sun.jndi.ldap.LdapCtx.(LdapCtx.java:293) at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175) at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193) at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136) at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66) at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) at javax.naming.InitialContext.init(InitialContext.java:223) at javax.naming.ldap.InitialLdapContext.(InitialLdapContext.java:134) 我知道如何使用自定义信任管理器进行启用SSL的连接 ,但是不知道如何使用连接JNDI API的连接,而我不管理实际的连接。 也就是说,以下标准设置在哪里可以插入信任管理器? 提前致谢。 Hashtable env […]

在Undertow中启用HTTPS

我们有一个有效的Apache mod_ssl配置。 我想为Undertow启用HTTPS支持,以便它同时监听http和https,从而避免了对Apache的需求。 我查看了Undertow的javadocs。 Undertow.Builder类有两个带有以下签名的addHttpsListener方法: public Builder addHttpsListener(int port, String host, KeyManager[] keyManagers, TrustManager[] trustManagers); public Builder addHttpsListener(int port, String host, SSLContext sslContext) { 因此,似乎我可以在使用Builder API引导Undertow时使用这些,例如 Undertow server = Undertow.builder() .addHttpsListener(8443, “localhost”, sslContext) .build(); 我不确定如何创建SSLContext变量,或者如何配置KeyManagers和TrustManagers。 拥有mod_ssl正在使用的证书文件,如何继续为Undertow启用HTTPS? 更新: 根据hwellmann的回答,我重用了SslContextFactory.createSslContext()方法。 在此之前,我必须将我的公钥/私钥对转换为PKCS12格式并将其导入Java密钥库。 提供SSL转换转换/导入命令(取自此处和此处 ),希望这些对任何人都有用: # Convert to PKCS12 $ openssl pkcs12 -export -out output_cert.pfx -inkey input_cert.key -in input_cert.crt […]

为什么我得到一个exceptionjavax.net.ssl.SSLPeerUnverifiedException:peer未经过身份validation?

我正在使用Apache HttpComponents HttpClient(4.0.1)进行HTTPS调用,但我将此exception作为响应: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:345) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121) at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:561) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732) 我提供了所有必需的参数。 目标系统不需要任何用户名/密码或代理,但它包含安装在服务器中的JKS证书。 用户名和密码是空值。 这与org.apache.commons.httpclient.methods.PostMethod一起使用 – 版本3.0 – commons-httpclient-3.0.jar现在我们用org.apache.http.client.methods.HttpPost实现了 – 版本4.0.1 – commons- httpclient.jar 这是不起作用的示例代码段: HttpParams param = new BasicHttpParams(); HttpProtocolParams.setVersion(param, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(param, “UTF-8”); HttpProtocolParams.setUseExpectContinue(param, true); DefaultHttpClient […]

从websphere 8.5.5.2访问ssl Web服务

我们有一个java Web应用程序,我们需要访问一个https Web服务的Web服务。 所以我将ssl证书添加到Websphere; SSL证书和密钥管理>密钥库和证书> NodeDefaultKeyStore>签名者证书 SSL证书和密钥管理>密钥库和证书> NodeDefaultTrustStore>签名者证书 当应用程序尝试访问Web服务时,会抛出exception,如下所示: tr.biznet.msign.service.signature.SignatureException: Mobil signature certificate query is failed. Unknown error. at tr.biznet.msign.service.signature.SignatureService.queryMobileSignCertificateRef(SignatureService.java:440) at tr.biznet.msign.controller.signature.BsspController.queryMobileSignCertificateRef(BsspController.java:227) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) at java.lang.reflect.Method.invoke(Method.java:611) at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:434) at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:372) at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:45) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:806) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:736) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:396) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:360) at javax.servlet.http.HttpServlet.service(HttpServlet.java:595) at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779) […]

Tomcat 7和无效的密钥库格式

我正在尝试通过远程服务器上的https连接到Tomcat; 我找到了很多答案,但没有人为我工作过; 我在Ubuntu Server 14.04上使用Apache,Tomcat 7。 首先,我创建了证书密钥库写入: keytool -genkey -alias tomcat -keyalg RSA 在我编辑了“/etc/tomcat7/server.xml”以在端口8443上使用ssl之后: 其中**********是密码; 通过以下方式重启Tomcat: sudo service tomcat7 restart 我在文件“/var/log/tomcat7/catalina.out”中收到以下错误: SEVERE: Failed to initialize connector [Connector[HTTP/1.1-8443]] org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-8443]] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106) at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:813) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) at org.apache.catalina.startup.Catalina.load(Catalina.java:638) at org.apache.catalina.startup.Catalina.load(Catalina.java:663) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at […]

为SSL套接字上的每个请求创建新进程会产生“TypeError:无法序列化套接字对象”,但对正常/非SSL套接字执行相同操作

我正在尝试使用python服务器和java客户端中使用java keytool生成的密钥和证书。 我创建了密钥和密钥库,导出证书,将证书添加到信任库,将密钥库转换为标准pkcs格式,然后从pkcs中提取密钥和证书以在python服务器中使用。 (从这里开始前三步,从这里开始最后三步)。 这个问题在某种程度上跟进了这个问题 ,并且可以在该问题中找到生成密钥和证书的详细步骤。 我的SSL服务器看起来像这样 server.py import socket import multiprocessing as mup import ssl def worker_ssl(data_socket, client_address): print(“Inside worker”) #some processing def start_server_ssl(): socketObj = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = (“127.0.0.1″, 6000) socketObj.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) socketObj.bind(server_address) socketObj.listen(10) ssl_socket = ssl.wrap_socket(socketObj, server_side = True, certfile=”cert.pem”, keyfile=”key.pem”) while True: print(“Waiting For Connections ………\n”) try: data_socket, client_address […]