Tag: ssl

Java上的服务器名称指示(SNI)

任何人都可以帮助我开始使用Java中的服务器名称指示进行HTTP连接吗? 我正在尝试从我管理的网站请求内容。 我一直在使用Apache的HttpClient库,但我对安全内容的请求失败,因为网站仅使用SNI进行HTTPS,并且在DefaultHttpClient中未启用SNI。 我已经在Apache的HttpClient库中查找了如何处理这个问题的说明,但我看到最终得到了这个文档: http : //hc.apache.org/httpclient-3.x/sslguide.html ,这已经过时了(当HttpClient和HttpCore是Apache的commons包的一部分时,请参考代码)。 所以…任何帮助?

实现X509TrustManager – 将部分validation传递给现有validation程序

我需要忽略PKIX路径构建exception javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderExc ption: unable to find valid certification path to requested target 我知道如何通过编写我自己的实现X509TrustManager的类来实现这一点,我总是从isServerTrusted return true 。 但是,我不想信任所有服务器和所有客户端。 我希望像当前​​一样为客户端完成所有默认validation。 对于服务器,我想忽略仅针对一个特定证书的服务器证书validation,但是希望继续进行validation,就像当前所做的那样(例如,使用cacerts商店)。 我怎样才能实现这样的目标 – 即在我更换之前将部分validation传递给X509TrustFactory对象。 这就是我想要做的 public boolean isServerTrusted(X509Certificate[] chain) { if(chain[0].getIssuerDN().getName().equals(“MyTrustedServer”) && chain[0].getSubjectDN().getName().equals(“MyTrustedServer”)) return true; // else I want to do whatever verification is normally done } 另外我不想打扰现有的isClientTrustedvalidation。 我怎样才能做到这一点?

使用Java建立与MySQL的安全连接Amazon RDS(SSL / TLS)

我正在尝试使用JDK 1.8和MySQL Connector / J版本5.1.23安全地连接到Amazon RDS,我对MySQL Connector / J文档中的说明感到困惑。 说明指出在当前目录中创建信任库并导入服务器的CA证书。 当我运行以下命令时,我被要求输入密码,我不知道输入什么: keytool -import -alias mysqlServerCACert -file file_location.pem -keystore truststore 另一方面,亚马逊的指示指出证书由证书颁发机构签名。 SSL证书包括数据库实例端点作为公共名称(CN)。 公钥也存储在http://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem中 。 虽然我理解SSL / TSL和私钥/公钥的概念,但我很困惑如何实现它? 当我运行SHOW VARIABLES LIKE ‘have_ssl’; 命令我收到“是”作为值。 当我连接到数据库并运行SHOW SESSION STATUS LIKE ‘Ssl_version’; ,我没有收到任何价值。 如何建立从Java到MySQL数据库的安全连接? 更新:我使用的是ubuntu,我使用keytool在JRE目录/usr/lib/jvm/java/jre/生成truststore.jks文件。 我还执行了以下命令: GRANT USAGE ON db_name.* To ‘username’@’address’ REQUIRE SSL; 以下代码是我连接数据库的方式: import com.mysql.jdbc.Connection; public class mainClass{ public […]

如何设置Spring Boot来运行HTTPS / HTTP端口

Spring引导具有一些属性来配置Web端口和SSL设置,但是一旦设置了SSL证书,http端口就会变成https端口。 那么,我怎样才能让两个端口都在其上运行,例如:80和443同时运行? 如您所见,只有一个端口的属性,在这种情况下启用了“server.ssl”,这使得http端口自动被禁用。 ############## ### Server ### ############## server.port=9043 server.session-timeout=1800 server.ssl.key-store=file:///C:/Temp/config/localhost.jks server.ssl.key-store-password=localhost server.ssl.key-password=localhost server.ssl.trust-store=file:///C:/Temp/config/localhost.jks server.ssl.trust-store-password=localhost 我试图使用甚至Tomcat或Undertow。 我很感激任何帮助!

Java 7并且无法生成DH密钥对

我读了一篇关于当服务器发出长度超过1024位的密钥时出现错误’无法生成DH密钥对’的post。 下载JCE无限量jar子应该可以解决这个问题。 在测试环境中,我遇到了以下内容,对于同一个Web服务器,如果我使用Java 6,在执行https查询时没有出现任何错误,但是如果我使用Java 7则会得到“无法生成DH密钥对”。 我尝试更换JCE无效的jar文件,但仍然得到相同的错误。 自2007年以来报告了该错误,但为什么它运行Java 6而不是Java 7? 要下载的文件不是正确的吗? 我从以前的postJava获得了链接:为什么SSL握手会给出“无法生成DH密钥对”的exception? 。 此时我不知道该怎么做。 如果我尝试加载BouncyCastle提供程序,我会得到一个ArrayOutOfIndexexception。 我的服务器只允许DH算法,所以我不能使用上面post中建议的其他算法。

将SSL证书添加到JRE以访问HTTPS站点

语境: 所以我试图从我的Java代码访问HTTPS站点,但由于我的localhost和服务器之间存在SSL握手问题,我无法使用。 这个问题的原因似乎是我尝试访问的URL没有从授权CA颁发的有效证书。 因此,经过一些研究,我将尝试将有问题的SSL证书导入我的JRE,这样就可以validation它。 题: 使用keytool导入证书的此命令的mac等价物是什么: keytool -import -alias mycertificate -keystore ..\lib\security\cacerts -file c:\mycert.cer 参考: [Solved] javax.net.ssl.sslhandshakeexception 非常感谢任何帮助或帮助,谢谢

将证书链保存在pkcs12密钥库中

以下代码: //used Bouncy Castle provider for keyStore keyStore.setKeyEntry(alias, (Key)keyPair.getPrivate(), pwd, certChain); certChain持有最终证书和颁发者证书(即两个证书), 如果keyStore是PKCS12的实例,则不会将颁发者证书保存为保存到文件系统密钥库文件中的链的一部分。 如果密钥库类型是PKCS12-3DES-3DES它会保存两个证书。 为什么是这样? PKCS12是否假设两个证书都是链的一部分? 编辑:这是一个SSCCE 。 这适用于”JKS” ,失败并显示”PKCS12″ :只有链中的第一个证书可通过getCertificateChain(String)访问。 可以使用openssl pkcs12打开保存的文件,显示两个证书。 public void testKeyStore() { try { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(“RSA”); keyPairGenerator.initialize(1024); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); Certificate[] outChain = { createCertificate(“CN=CA”, publicKey, privateKey), createCertificate(“CN=Client”, publicKey, […]

创建一个接受HTTPS的Java代理服务器

我已经有一个可以处理多个HTTP请求的工作HTTP代理服务器。 现在我的问题是如何处理https请求? 这是我正在使用的简化代码: class Daemon { public static void main(String[] args) { ServerSocket cDaemonSocket = new ServerSocket(3128); while(true) { try { Socket ClientSocket = cDaemonSocket.accept(); (new ClientHandler(ClientSocket )).start(); }catch(Exception e) { } } } } 和ClientHandler class ClientHandler extends Thread { private Socket socket = null; private Socket remoteSocket = null; private HTTPReqHeader request = […]

通过Java与Apple Push Notification Server进行SSL握手

您好我正在尝试使用Java向我的设备发送推送消息。 但是我在建立ssl连接时已经遇到了问题。 这是到目前为止的代码: KeyStore keyStore = KeyStore.getInstance(“PKCS12”); InputStream key = getClass().getResourceAsStream(“apns-dev-key.p12”); char[] c = key.toString().toCharArray(); keyStore.load(getClass().getResourceAsStream(“apns-dev-cert.p12”), c); KeyManagerFactory keyMgrFactory = KeyManagerFactory.getInstance(“SunX509”); keyMgrFactory.init(keyStore, c); SSLContext sslContext = SSLContext.getInstance(“TLS”); sslContext.init(keyMgrFactory.getKeyManagers(), null, null); SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket(host, port); String[] cipherSuites = sslSocket.getSupportedCipherSuites(); sslSocket.setEnabledCipherSuites(cipherSuites); sslSocket.startHandshake(); 我得到的错误是: java.io.IOException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: […]

Java的弱密码套件列表

我正在运行一个需要弱密码套件黑名单的服务器。 那以下哪一项很弱? http://java.sun.com/javase/6/docs/technotes/guides/security/SunProviders.html#SunJSSEProvider