哪里可以下载最新版Java的JSSE和JCE源代码?https://jdk6.dev.java.net/上提供的源代码构建版不包含javax.crypto(JCE)包和com.sun.net.ssl.internal(JSSE)包.
无法调试这些类使得解决SSL问题非常困难.
如何以编程方式从包含证书和私钥的PEM文件中获取KeyStore?我试图通过HTTPS连接向服务器提供客户端证书.我已经确认,如果我使用openssl和keytool获取jks文件,我会动态加载客户端证书.我甚至可以通过动态读取p12(PKCS12)文件来使其工作.
我正在研究使用BouncyCastle的PEMReader类,但我无法解决一些错误.我正在运行带有-Djavax.net.debug = all选项的Java客户端和带有调试LogLevel的Apache Web服务器.我不知道该找什么.Apache错误日志表明:
...
OpenSSL: Write: SSLv3 read client certificate B
OpenSSL: Exit: error in SSLv3 read client certificate B
Re-negotiation handshake failed: Not accepted by client!?
Run Code Online (Sandbox Code Playgroud)
Java客户端程序指示:
...
main, WRITE: TLSv1 Handshake, length = 48
main, waiting for close_notify or alert: state 3
main, Exception while waiting for close java.net.SocketException: Software caused connection abort: recv failed
main, handling exception: java.net.SocketException: Software caused connection abort: recv failed
%% Invalidated: [Session-3, TLS_RSA_WITH_AES_128_CBC_SHA]
main, SEND TLSv1 ALERT: fatal, description = …Run Code Online (Sandbox Code Playgroud) 有没有人遇到此错误?我是SSL的新手,我的ClientHello有什么明显的错误吗?抛出该异常时没有ServerHello响应.任何建议表示赞赏.
*** ClientHello, TLSv1
RandomCookie: GMT: 1351745496 bytes = { 154, 151, 225, 128, 127, 137, 198, 245, 160, 35, 124, 13, 135, 120, 33, 240, 82, 223, 56, 25, 207, 231, 231, 124, 103, 205, 66, 218 }
Session ID: {}
Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]
Compression Methods: { 0 }
***
[write] MD5 and SHA1 hashes: len = 75
0000: 01 00 00 47 03 …Run Code Online (Sandbox Code Playgroud) 该SSLSocket.getEnabledProtocols()方法返回以下内容: [SSLv2Hello, SSLv3, TLSv1].事实上,当我打电话connect()并打开SSL调试时,我看到使用了一个v2客户端问候:
main, WRITE: TLSv1 Handshake, length = 81
main, WRITE: SSLv2 client hello message, length = 110
Run Code Online (Sandbox Code Playgroud)
但我已经发现了两个(诚然旧)基准说JSSE并不能支持SSL版本2:
来自Java的基础网络:
'SSLv2Hello'是一种伪协议,它允许Java使用SSLv2'hello消息'发起握手.这并不会导致使用的SSLv2协议,这是不是Java的所有支持.
并从JSSE参考指南:
J2SDK 1.4及更高版本中的JSSE实现实现了SSL 3.0和TLS 1.0.它没有实现SSL 2.0.
现在,我的理解是,当客户端2.0版客户端问候应只发送不支持SSL 2.0版.来自RFC 2246:
支持SSL 2.0版服务器的TLS 1.0客户端必须发送SSL 2.0版客户端问候消息[SSL2] ... 警告:发送2.0版客户端问候语消息的能力将逐步淘汰.
那么为什么Java使用它呢?
我们有一个Java Socket服务器监听SSLSocket(端口443)和一个连接它的iOS应用程序.在iOS 5.1上运行时,当我们将Java版本的服务器从JDK 1.5升级到1.6(或1.7)时,应用程序停止工作.在iOS 6上运行时,该应用程序可以很好地连接到JDK 5和6.
iOS应用报告错误: -9809 = errSSLCrypto.在Java方面,我们得到了javax.net.ssl.SSLException: Received fatal alert: close_notify.
在Java服务器端,我们启用了所有可用的密码套件.在客户端,我们测试了几个不同的套件,虽然我们还没有完成一个涉及每个单独启用的测试.现在,当我们使用时TLS_DH_anon_WITH_AES_128_CBC_SHA它失败了,虽然它已经失败了,但我们开始认为它不是套件.
这是调试输出.它一直到达ServerHelloDone,然后很快失败:
Is secure renegotiation: false
[Raw read]: length = 5
0000: 16 03 03 00 41 ....A
[Raw read]: length = 65
0000: 01 00 00 3D 03 03 50 83 1E 0B 56 19 25 65 C8 F2 ...=..P...V.%e..
0010: AF 02 AD 48 FE E2 92 CF B8 …Run Code Online (Sandbox Code Playgroud) 我已经阅读了一个相关的问题,但它似乎没有在我看到失败的同一个地方失败.
我正在尝试一个非常简单的操作:
public static void main(String [] argv) {
try {
URL u = new URL("https://membership.usairways.com/Login.aspx");
Object o = u.getContent();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但是在我的Mac和Windows机器上使用Java 6运行时会遇到handshake_failure.
其他人继续遇到无法找到证书的问题,但调试日志(-Djavax.net.debug=ssl:handshake)显示找到的证书很好:
keyStore is : keyStore type is : jks keyStore provider is : init keystore init keymanager of type SunX509 trustStore is: C:\Program Files (x86)\Java\jre6\lib\security\cacerts trustStore type is : jks trustStore provider is : init truststore adding as trusted cert: …
我刚刚安装了Ubuntu 15.10和他们的openjdk-8-jdk(通过apt-get).
现在我错过了cacerts文件.
通常的位置有一个链接:
ls -l /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts
lrwxrwxrwx 1 root root 27 Oct 22 01:47 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts -> /etc/ssl/certs/java/cacerts
Run Code Online (Sandbox Code Playgroud)
但在/ etc/ssl/certs/java/cacerts中没有任何内容:
stat /etc/ssl/certs/java/cacerts
stat: cannot stat ‘/etc/ssl/certs/java/cacerts’: No such file or directory
Run Code Online (Sandbox Code Playgroud) 我想创建一个应用程序使用SSLSocket:客户端发送String到服务器,服务器将大写,String然后发送回客户端进行显示.
public class SSLServer {
public static void main(String args[]) throws Exception
{
try{
//Creaet a SSLServersocket
SSLServerSocketFactory factory=(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket=(SSLServerSocket) factory.createServerSocket(1234);
//T?o 1 ??i t??ng Socket t? serversocket ?? l?ng nghe và ch?p nh?n k?t n?i t? client
SSLSocket sslsocket=(SSLSocket) sslserversocket.accept();
//Tao cac luong de nhan va gui du lieu cua client
DataInputStream is=new DataInputStream(sslsocket.getInputStream());
PrintStream os=new PrintStream(sslsocket.getOutputStream());
while(true) //khi dang ket noi voi client
{
//Doc du lieu den
String …Run Code Online (Sandbox Code Playgroud) 我正在查看JSSE参考指南,我需要获取一个实例SSLContext才能创建一个SSLEngine,所以我可以使用它Netty来启用安全性.
为了获得一个实例SSLContext,我使用SSLContext.getInstance().我看到该方法被多次覆盖,因此我可以选择使用协议和安全提供程序.
在这里,我可以看到可以使用的算法列表.我应该使用哪种算法来实现安全通信?
此外,由于可以指定要使用的安全提供程序,我应该使用哪个提供程序?
谢谢
我正在寻找解析每天更新所述文件的XML文件 - 我遇到的唯一问题是他们使用自己的证书(https:// ..)并且我不能使用该特定URL,也不能是否有http:// ...链接可用.
URL url = new URL("https://...");
...
Document document = db.parse(url.openStream());
Run Code Online (Sandbox Code Playgroud)
此代码在运行我的测试时抛出以下异常:
javax.net.ssl.SSLException:java.lang.RuntimeException:意外错误:java.security.InvalidAlgorithmParameterException:trustAnchors参数必须为非空
我已经看到了各种建议,涉及创建各种类来处理这种连接或个人服务器,以及将证书添加到密钥库,然后将该密钥库添加到Java项目,但我一直在无法做到这一点,我正在寻找一种稍微简单的方式让我去在线访问XML.
jsse ×10
java ×9
ssl ×8
bouncycastle ×1
ios5 ×1
java-8 ×1
jce ×1
openjdk ×1
security ×1
sockets ×1
truststore ×1
ubuntu ×1
ubuntu-15.10 ×1