Tag: ssl

以PEM格式转换私钥

我用Java代码创建了一个自签名证书并添加到KeyStore中。 现在,我想将创建的私钥和证书导出为PEM格式的文​​件。 没有任何第三方库,是否有可能实现这一目标? 下面是我用于创建自签名证书的代码。 public void createSelfSignedSSLCertificate() { try { final CertAndKeyGen keypair = new CertAndKeyGen(“RSA”, “SHA1WithRSA”, null); final X500Name x500Name = new X500Name(commonName, organizationalUnit, organization, city, state, country); keypair.generate(keysize); final PrivateKey privKey = keypair.getPrivateKey(); final X509Certificate[] chain = new X509Certificate[1]; chain[0] = keypair.getSelfCertificate(x500Name, new Date(), validity * 24 * 60 * 60); final String […]

TLS扩展“服务器名称指示”(SNI):服务器端不可用的值

基于JSSE示例,我试图在服务器端获取TLS参数“服务器名称指示”(SNI)的值 – 但没有成功。 我确信该值是由客户端发送的,因为我使用了显示该值的网络嗅探器(Wireshark)。 但是,当我使用以下代码片段时,服务器名称参数列表为空(显示“协议”): public void connectionAccepted(Socket socket) { System.out.println(“Connection accepted!”); try { /* get SNI parameter */ SSLSocket sslSocket = (SSLSocket)socket; SSLParameters sslParams = sslSocket.getSSLParameters(); List serverNames = sslParams.getServerNames(); for(SNIServerName item : serverNames){ System.out.println(“SNI: ” + item.toString()); } String[] protocols = sslParams.getProtocols(); for(String item : protocols) { System.out.println(“Protocols: ” + item.toString()); } } […]

CA PEM文件到jks tomcat truststore

我获得了由某个CA签署的p12公钥/私钥。 我有一个本地tomcat服务器,我正在进行开发工作。 我是安全新手,但我相信需要将CA公共证书放入我的tomcats信任库。 (我试图让x509证书与CAS合作) 如何让我的tomcat(和JVM)信任这个CA? 有没有办法从p12和我的tomcat信任库中获取CA公共证书? (我还从firefox导出了证书以获取CA的PEM文件) 我看到很多关于jsk的post,但不是相反。 我只需要CA. (我认为) :)

确定Java中TLS握手的Diffie-Hellman“参数”长度

我想与服务器建立HTTPS连接,如果我使用非短暂的DH密钥交换,我想知道该连接的参数是什么。 实际上,我并不关心它是否是短暂的。 我正在寻找的是能够建立连接,然后警告连接是否使用“弱”DH参数。 这是我可以在连接时检查的东西吗? 或者是由密码套件本身定义的DH参数集(或者更具体地说,这些参数的长度 ,以位为单位)? 例如,Qualys社区线程有一个SSLLabs认为“弱”的密码套件的图示(好吧,每个人都认为它们很弱……他们只是有一个抱怨它们的公共工具): https://community.qualys。 COM /线程/ 14821 他们特别提到例如TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 ,它是密码套件0x9f并提及DH参数。 这些参数的参数是否被加密到密码套件中(意味着它们总是 1024位),或者这是服务器的配置,由于特定的DH参数选择,使得这些密码套件变弱了? 在任何一种情况下,如果可能的话,我希望能够从连接中嗅出该信息。 有谁知道这是否可以做到,以及如何做? 我已经编写了一些代码来尝试获取有关握手的信息,但是我一直在为我希望包含这些数据的对象获取null 。 SSLSocketFactory sf = …; Socket sock = new Socket(); sock.connect(address, timeout); SSLSocket socket = (SSLSocket)sf.createSocket(sock, host, port, true); socket.startHandshake(); SSLSession sess = socket.getHandshakeSession(); 我希望此时的sess包含一些关于握手的有趣信息,但它是null 。 startHandshake的javadoc表示它将在握手完成时通知事件侦听器。 所以我尝试了这个: SSLSocketFactory sf = …; Socket sock = new Socket(); […]

将密钥和SSL证书导入java密钥库

我有pem格式的证书文件和私钥文件。 是否可以使用Java代码将这些文件加载​​到Java密钥库中,使用JDK附带的默认库而不是第三方库。 当我尝试谷歌搜索时,我只能找到.der格式的文件,使用java代码导入到java密钥库中。 http://knowledge-oracle.blogspot.in/2009/02/import-private-key-and-certificate-in.html 是否可以通过java代码将pem格式的密钥和证书文件加载到java密钥库中,而无需转换为.der格式?

什么是用于缓解Logjam / weakdh.org的正确的JBoss EAP 6.0.1密码套件配置?

由于最近几天logjam和网站https://weakdh.org/(Logjam:Diffie-Hellman如何在实践中失败)的关注,我决定强化我的JBoss EAP 6.0.1系统上的SSL配置这里描述: 13.2.5。 SSL连接器参考: https : //access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6/html/Administration_and_Configuration_Guide/SSL_Connector_Reference1.html 交叉参考这里: http : //www.coderanch.com/t/613062/JBoss/configuring-SSL-Https-Jboss 我的standalone.xml的相关部分包含在下面的混淆forms中: 协议限制正在起作用,但据我所知,密码套件属性没有效果。 我已将列表缩减为仅两个套件,但JBoss在端口8443上返回的列表始终相同。 我已经针对Qualys SSL Labs测试了系统,并且返回的密码套件列表包含了我的列表中未包含的许多密码。 Cipher Suites (sorted by strength; the server has no preference) TLS_RSA_WITH_RC4_128_MD5 (0x4) WEAK 128 TLS_RSA_WITH_RC4_128_SHA (0x5) WEAK 128 TLS_RSA_WITH_AES_128_CBC_SHA (0x2f) 128 TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33) DH 768 bits (p: 96, g: 96, Ys: 96) FS INSECURE 128 TLS_ECDHE_RSA_WITH_RC4_128_SHA (0xc011) […]

Maven错误:(重复)java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空

不得不再问一次。 有人认为这是一个重复的问题 ,已经回答并从列表中删除。 我正在使用maven(mvn)批处理命令与windows(不是m2e与eclipse)运行干净安装或解决依赖关系。 有时,当更改pom.xml时,有必要从我们的nexus服务器下载工件。 这对我来说已经很久了。 但是现在连接到nexus服务器(https,服务器使用公司拥有的证书)失败了“ java.security.InvalidAlgorithmParameterException:trustAnchors参数必须是非空的 ”我知道,我更改了Java版本。 但我很确定我维护cacerts密钥库的方式与之前版本相同。 (在租用时我比较了两个cacerts中的指纹;它们是相同的)。 运行命令“ mvn -s -Djavax.net.debug = all -Djava.net.ssl.trustStore =”C:/Programme/Java/jre1.8.0_102/lib/security/cacerts“-Djavax.net.ssl .trustStorePassword = changeit dependency:resolve “,ssl-trace说: keyStore is : keyStore type is : jks keyStore provider is : init keystore init keymanager of type SunX509 trustStore is: No File Available, using empty keystore. trustStore type is : […]

Java 8 javax.net.ssl.SSLPeerUnverifiedException:peer未经过身份validation,但不是Java 7

将应用程序从Java 7切换到Java 8时出现问题。更改JDK后,我开始收到此SSLPeerUnverifiedexception。 改回Java7,也不例外。 我发现了这个问题: Java 7的SSL连接失败,这意味着这可能与服务器端问题有关。 我们的服务器确实在Ubuntu机器上运行,但它也在运行Java8(sun Java8) 不确定发布还有什么其他内容。 如果需要/有用,我可以提供代码示例。 我现在没有把它们包括在内,因为好像代码不是问题。 编辑 – 链接到我的SSLSocketFactory扩展: http : //pastebin.com/2j6HDHE7 Edit2 – Http客户端代码: private HttpClient getHttpClient() throws GeneralSecurityException, IOException { final KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(CommandChannel.class.getResourceAsStream(“myKeystore”), “myPassword”.toCharArray()); final SSLSocketFactory sslSocketFactory = new TrustingSSLSocketFactory(trustStore); final SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme(“http”, 80, PlainSocketFactory.getSocketFactory())); registry.register(new Scheme(“https”, 443, sslSocketFactory)); […]

在Tomcat 8上配置SSL和连接超时

我设置了一个密钥库并从openssl.com获得了SSL证书。 我遵循的具体步骤如下: https : //drive.google.com/file/d/0B6PUGo7cBLcDTzdkc0pzT2pTMk0/view?usp=sharing 不幸的是,即使完全按照他们对tomcat的说明并使用客户支持,我的https连接也会超时。 好像tomcat已启动并运行,正在侦听端口443,但我不知道如何更深入地调试。 Http请求服务很好,所以我知道tomcat本身工作正常。 [ec2-user@ip- logs]$ sudo netstat -tunlp | grep 443 tcp6 0 0 :::443 :::* LISTEN 19407/java [ec2-user@ip- logs]$ ps -ef | grep java root 19407 1 1 23:03 pts/0 00:00:06 /usr/java/jre1.8.0_60//bin/java -Djava.util.logging.config.file=/usr/apache-tomcat-8.0.26//conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/apache-tomcat-8.0.26//endorsed -classpath /usr/apache-tomcat-8.0.26//bin/bootstrap.jar:/usr/apache-tomcat-8.0.26//bin/tomcat-juli.jar -Dcatalina.base=/usr/apache-tomcat-8.0.26/ -Dcatalina.home=/usr/apache-tomcat-8.0.26/ -Djava.io.tmpdir=/usr/apache-tomcat-8.0.26//temp org.apache.catalina.startup.Bootstrap start ec2-user 19449 18021 0 23:13 pts/0 00:00:00 […]

如何在Java中设置TLS1.2版本

环境细节: java version “1.7.0_40” Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode). 我们正在使用jboss-4.2.3.GA和使用ejb的胖客户端。 我们尝试通过以下方式设置TLS1.2版本: 控制面板 – >程序 – > Java – >高级选项卡 – >高级安全设置选中了TLS1.1和TLS1.2并取消选中剩余的旧版本。 但仍然在Wire shark软件中,我们看到客户端只与TLSV1中的服务器通信。 -Ddeployment.security.SSLv2Hello=false -Ddeployment.security.SSLv3=false -Ddeployment.security.TLSv1=false -Ddeployment.security.TLSv1.1=true -Ddeployment.security.TLSv1.2=true 在启动脚本中给出,但在Wire shark软件中,我们看到客户端仅与TLSV1中的服务器通信。 参考链接: https : //superuser.com/questions/747377/enable-tls-1-1-and-1-2-for-clients-on-java-7 jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSv1.1 在jre/lib/security/java.security和jdk1.7.0_40/jre/lib/security/java.security 。 但仍然在Wire shark软件中,我们看到客户端只与TLSV1中的服务器通信。 参考链接: 如何强制java服务器只接受tls […]