我正在开发一个java代理来监视我的应用服务器中发生的http通信。 我想知道传出Https连接中使用的SSL版本(SSLv3,TLS等)。 有没有办法以任何方式获得SSL版本?
我需要测试部署到HTTPS端点上部署的预发布环境的Web服务。 不幸的是,SoapUI因SSLPeerUnverifiedException: peer not authenticated失败SSLPeerUnverifiedException: peer not authenticatedexception。 我使用了4.6.4和非常新的5.0版本。 ENV: 端点是https,startcom证书,网络使用代理(但相同的问题,没有代理与不同的网络) 我花了很多时间,也许每天都在谷歌上搜索解决方案。 特别是这个链接看起来很有希望: https : //forum.soapui.org/viewtopic.php?f = 13&t = 20866 我通过firefox提取了端点证书并让它信任。 所以我修改了soapui JVM安装中的cacerts : ..\SoapUI-4.6.4\jre\lib\security>keytool -import -alias HOSTNAME -file endpoint.crt -keystore cacerts -storepass changeit 重新启动然后重新测试 – 失败。 然后我采取了不同的方法,让SoapUI JVM信任所有StartCom证书。 keytool -import -trustcacerts -alias startcom.ca -file ca.crt -keystore cacerts keytool -import -alias startcom.ca.sub -file sub.class1.server.ca.crt -keystore […]
以下代码工作正常: public static void main(String[] args) { String userName = “admin”; String password = “s3cret”; Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, “com.sun.jndi.ldap.LdapCtxFactory”); env.put(Context.PROVIDER_URL, “ldap://192.168.10.45:389/dc=softwaredev,dc=local”); //env.put(Context.SECURITY_PROTOCOL, “ssl”); env.put(Context.SECURITY_AUTHENTICATION, “simple”); env.put(Context.SECURITY_PRINCIPAL, new String(“softwaredev” + “\\” + userName)); env.put(Context.SECURITY_CREDENTIALS, password); DirContext ctx = null; NamingEnumeration results = null; try { ctx = new InitialDirContext(env); SearchControls controls = new […]
对于仅支持TLSv1 Java 8服务器,它无法通过TLSv1 OS实现安全套接字连接 版 java version “1.8.0_45” Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) 资源 import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * Created by jigar.joshi on 6/10/15. */ public class SSLTester { public static void main(String[] args) throws Exception […]
概观 JSSE允许用户通过指定javax.net.ssl。*参数来提供默认信任存储和密钥存储。 我想为我的应用程序提供一个非默认的TrustManager,同时允许用户像往常一样指定KeyManager,但似乎没有任何方法可以实现这一点。 细节 http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#CustomizingStores 假设在unix机器上我想允许用户使用pkcs12密钥存储区进行身份validation,而在OS XI上则希望允许用户使用系统密钥链。 在OS X上,应用程序可能会按如下方式启动: java -Djavax.net.ssl.keyStore=NONE -Djavax.net.ssl.keyStoreType=KeychainStore \ -Djavax.net.ssl.keyStorePassword=- -jar MyApplication.jar 这将正常工作:当应用程序访问需要相互身份validation(客户端证书身份validation)的https服务器时,将提示用户允许访问其钥匙串。 问题 现在假设我想将自签名证书颁发机构与我的应用程序捆绑在一起。 我可以通过构造一个TrustManagerFactory并传入一个包含我的证书( javadoc )的KeyStore来覆盖默认的信任管理器。 但是,要使用此非默认信任管理器,我需要创建并初始化SSLContext。 这里存在问题。 通过调用init(..)并传递KeyManager和TrustManager来初始化SSLContexts。 但是,使用javax.net.ssl。*参数创建KeyManager的逻辑嵌入在默认SSLContexts的实现中 – 我找不到使用默认行为获取KeyManager或KeyManagerFactory的方法,同时还指定了非默认的TrustManager或TrustManagerFactory。 因此,似乎不可能使用例如适当的操作系统特定的钥匙串实现,同时还提供用于validation远程服务器的根证书。
我搜索了SO,谷歌搜索超过2天,并没有找到任何帮助我的答案。 我坚持通过TLS / SSL(FTPS)服务器连接到FTP。 我正在使用SimpleFTP库,因为我可以连接没有SSL的FTP服务器,但无法连接FTPS。 它在第2行(ftp.connect)给我这个错误, 连接到FTP服务器时,SimpleFTP收到未知响应: 220 ———-欢迎来到Pure-FTPd [privsep] [TLS] ———- 并使用下面的代码 SimpleFTP ftp = new SimpleFTP(); // Connect to an FTP server on port 21. ftp.connect(“xxx.xxx.xxx.xxx”, 21, “username”, “pwd”); //getting error at (ftp.connect) above line // Set binary mode. ftp.bin(); // Change to a new working directory on the FTP server. ftp.cwd(“web”); ftp.disconnect();
我正在使用Httpclient-4.5.2.jar和httpcore-4.4.4.jar HttpClient组件,我收到以下错误。 Exception in thread “main” java.lang.NoSuchFieldError: INSTANCE at org.apache.http.conn.ssl.SSLConnectionSocketFactory.(SSLConnectionSocketFactory.java:144) at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:966) 我的源代码如下。 try { System.out.println(“came to try catch”); HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost request = new HttpPost(“https://bizz.mobilezz.lk/apicall/loanprepaidapi/v1”); StringEntity params =new StringEntity(“{\”mobile\”:\”776037285\”,\”path\”:\”IVV\”,\”loanAmount\”:\”200000\”}”); request.addHeader(“content-type”, “application/json”); request.addHeader(“Authorization”, “Bearer casmk34233mlacscmaacsac”); request.addHeader(“Accept”, “application/json”); request.setEntity(params); HttpResponse response = httpClient.execute(request); System.out.println(“response is :”+response.getStatusLine()); } catch (Exception e) { e.printStackTrace(); 请帮我摆脱这个错误。 我正在尝试在post方法中发送请求并获取json响应。
我必须通过SSL双重身份validation连接到服务器。 我已将自己的私钥加证书添加到keystore.jks ,将服务器的自签名证书添加到truststore.jks ,这两个文件都复制到/ usr / share / tomcat7。 我的代码使用的套接字工厂由以下提供者提供: @Singleton public static class SecureSSLSocketFactoryProvider implements Provider { private SSLSocketFactory sslSocketFactory; public SecureSSLSocketFactoryProvider() throws RuntimeException { try { final KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); final InputStream trustStoreFile = new FileInputStream(“/usr/share/tomcat7/truststore.jks”); trustStore.load(trustStoreFile, “changeit”.toCharArray()); final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(trustStore); final KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); final InputStream keyStoreFile […]
我读了这篇非常有用的文章,关于以编程方式禁用所有https证书。 我只在开发中需要这样的方法。 我正在使用Spring。 那么有没有人有关于如何在Spring上下文文件中而不是在Java代码中执行相同操作的想法? 我的意思是代码的这个特定部分: SSLContext sc = SSLContext.getInstance(“SSL”); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 实际上,我可以模拟第一行:类似的东西: 另外,我可以创建这个trustAllCerts bean。 但是……我很困惑..有可能在spring上下文初始化中调用bean的某个方法吗? 我的意思是如何在spring上下文文件中调用sc.init和sc.getSocketFactory? 这不可能吗?
我目前有一个应用程序,可以向很多URL发出HTTP post请求。 某些连接失败,出现以下exception。 线程“main”中的exceptionjavax.net.ssl.SSLProtocolException:握手警报:sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1410)的sunrecognized_name,位于sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java: 2004)sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1113)at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java) :1391)在sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)sun.net.www.protocol的sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375)。 https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)at com.amazon.cba.iopn.test.MainTest.connectWithFallbackIfRequired(MainTest。 java:246)at com.amazon.cba.iopn.test.MainTest.createHttpConnection(MainTest.java:201) at com.amazon.cba.iopn.test.MainTest.processLine(MainTest.java:105)at com.amazon.cba.iopn.test.MainTest.main(MainTest.java:99) 我从网上读到其他文章后发现,这是服务器配置的问题。 响应中的服务器抛出一个警告,Java将其视为exception。 解决方法是将jsse.enableSNIExtension设置为“ false ”。 如果将jsse.enableSNIExtension系统属性设置为false ,则客户端暴露的安全风险是什么? PS:我们尝试通过HTTPS连接的所有url。 因此,将有证书validation。