直到最近,我无法从没有此问题的计算机更新或提交svn.我更新了乌龟svn客户端.我可以删除文件夹并每次都删除一个新副本,但不能提交或更新.
无法连接到URL上的存储库
选项SSL握手失败:SSL错误:sslv3 alert非法参数
我有一个Tomcat7 Web服务器,我尝试通过将此连接器添加到server.xml文件来配置为接受安全连接:
<Connector SSLEnabled="true"
acceptCount="100"
connectionTimeout="20000"
executor="tomcatThreadPool"
keyAlias="server"
keystoreFile="c:\opt\engine\conf\tc.keystore"
keystorePass="o39UI12z"
maxKeepAliveRequests="15"
port="8443"
protocol="HTTP/1.1"
redirectPort="8443"
scheme="https"
secure="true"
sslProtocol="TLS"/>
Run Code Online (Sandbox Code Playgroud)
我正在使用使用此命令生成的自签名证书:
%JAVA_HOME%/bin/keytool -genkeypair -keystore c:\opt\engine\conf\tc.keystore -storepass o39UI12z-keypass o39UI12z-dname "cn=Company, ou=Company, o=Com, c=US" -alias server -validity 36500
Run Code Online (Sandbox Code Playgroud)
在客户端,我有一个使用连接服务器的spring应用程序RestTemplate.在应用程序上下文启动时,我以restTemplate这种方式初始化实例:
final ClientHttpRequestFactory clientHttpRequestFactory =
new MyCustomClientHttpRequestFactory(new NullHostNameVerifier(), serverInfo);
restTemplate.setRequestFactory(clientHttpRequestFactory);
Run Code Online (Sandbox Code Playgroud)
MyCustomClientHttpRequestFactory类如下所示:
public class MyCustomClientHttpRequestFactory extends SimpleClientHttpRequestFactory {
private static final Logger LOGGER = LoggerFactory
.getLogger(MyCustomClientHttpRequestFactory.class);
private final HostnameVerifier hostNameVerifier;
private final ServerInfo serverInfo;
public MyCustomClientHttpRequestFactory (final HostnameVerifier hostNameVerifier,
final ServerInfo serverInfo) …Run Code Online (Sandbox Code Playgroud) 我知道这个主题在很多地方都有讨论,但在我经历了几乎所有这些之后,我决定创建我的第一个StackOverflow问题......
问题如下:
我想连接到使用证书来限制访问的安全Web服务(https),以及用于验证用户身份的用户名/密码.所以我有一个客户端证书(p12文件)和一个服务器证书(pem或der文件).我尝试使用HttpURLConnection类,因为从我所听到的,Android上将不再支持Apache库.
所以这是我的实现(serverCert和clientCert是我的文件的完整路径):
// Load CAs from our reference to the file
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInput = new BufferedInputStream(new FileInputStream(serverCert));
X509Certificate serverCertificate;
try {
serverCertificate = (X509Certificate)cf.generateCertificate(caInput);
System.out.println("ca=" + serverCertificate.getSubjectDN());
} finally {
caInput.close();
}
Log.d(TAG, "Server Cert: " + serverCertificate);
// Create a KeyStore containing our trusted CAs
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null);
trustStore.setCertificateEntry("my ca", serverCertificate);
//Load the Client certificate in the keystore
KeyStore keyStore = KeyStore.getInstance("PKCS12");
FileInputStream fis = new FileInputStream(clientCert);
keyStore.load(fis,CLIENT_PASSWORD);
// Create a …Run Code Online (Sandbox Code Playgroud) ssl android certificate sslhandshakeexception httpsurlconnection
我在ab上运行了一些测试,当我使用超过155的并发级别时,我得到以下内容:
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
SSL handshake failed (5).
Completed 100 requests
Completed 200 requests
Finished 200 requests
Run Code Online (Sandbox Code Playgroud)
请求仍然成功:
Concurrency Level: 200
Time taken for tests: 14.481 seconds
Complete requests: 200
Failed requests: 0
Run Code Online (Sandbox Code Playgroud)
我已经多次测试过,只有当并发度超过155时,SSL握手才会失败.有人可以向我解释它们是如何直接相关的吗?
我正在尝试向 Java 中的端点发出 POST 请求,当我尝试发送请求时,出现以下错误:
Caused by: javax.net.ssl.SSLHandshakeException: The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止
Map<Object, Object> data = new HashMap<>();
data.put("username","foo");
data.put("password","bar");
String url = "https://google.com";
HttpRequest request = HttpRequest.newBuilder()
.POST(buildFormDataFromMap(data))
.uri(URI.create(url))
.build();
try{
HttpResponse<String> response = httpClient.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
} catch (Exception e){
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
然后当我运行代码时,发送请求/制作响应对象时会抛出错误。我的问题是,如果服务器与客户端的 TLS 首选项不同,我该如何更改 Java 中的首选项,以便它仍然可以发出请求?
我使用的BouncyCastle的供应商和Apache的HttpClient信任的SSL证书,由Antoine豪克描述这里.
我制作的应用程序的目标是Android 1.5,并且在模拟器和运行3.0的设备上运行良好.但是,当我尝试在2.2(Galaxy S)上测试它时,会发生SSLException,"不可信服务器证书".
由于抱怨BouncyCastle本身没有错误,我假设设备没有正确地从.bks文件中读取证书.我试图在Android 2.2版上使用BouncyCastle,或者是否需要在工作3.0应用程序中进行更改?
更新
当我今天再次尝试运行该应用程序时,它第一次正常运行.我现在已经尝试了好几次了,它有时运行正常,但有时仍会得到SSLException.当发生这种情况时似乎没有任何模式 - 它可能连续几次工作然后反复失败.
有了这样的代码:
val html = Source.fromURL("https://scans.io/json")
Run Code Online (Sandbox Code Playgroud)
获得例外:
Exception in thread "main" 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 sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1886)
...
Run Code Online (Sandbox Code Playgroud)
我可以找到如何修复Java但不知道 - 如何在Scala中修复它?
我必须使用旧版本(1.8.1)的放心框架。我的所有请求post()或get()从放心调用的请求都会失败,因为我用于测试的服务器具有自签名 SSL 证书。
我知道从 2.2.0 版本开始,设置 ssl 连接很容易使用relaxedHTTPSValidation,例如
given().relaxedHTTPSValidation().when().get("https://some_server.com")
Run Code Online (Sandbox Code Playgroud)
我还在rest-assured wiki上找到了如何处理SSL配置。
但我的问题是在旧版本的放心(1.8.1)中是否可能。
抛出的异常是SSLHandshakeException.
这是我得到的痕迹:
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 sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:543)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:409)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446) …Run Code Online (Sandbox Code Playgroud) 我正在测试HttpClientJava 11的新功能并遇到以下行为:
我正在向公共 REST API 发出两个异步请求以进行测试,并使用一个客户端和两个单独的请求进行了尝试。这个过程没有抛出任何异常。
String singleCommentUrl = "https://jsonplaceholder.typicode.com/comments/1";
String commentsUrl = "https://jsonplaceholder.typicode.com/comments";
Consumer<String> handleOneComment = s -> {
Gson gson = new Gson();
Comment comment = gson.fromJson(s, Comment.class);
System.out.println(comment);
};
Consumer<String> handleListOfComments = s -> {
Gson gson = new Gson();
Comment[] comments = gson.fromJson(s, Comment[].class);
List<Comment> commentList = Arrays.asList(comments);
commentList.forEach(System.out::println);
};
HttpClient client = HttpClient.newBuilder().build();
client.sendAsync(HttpRequest.newBuilder(URI.create(singleCommentUrl)).build(), HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(handleOneComment)
.join();
client.sendAsync(HttpRequest.newBuilder(URI.create(commentsUrl)).build(), HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(handleListOfComments)
.join();
Run Code Online (Sandbox Code Playgroud)
然后我尝试将其重构HttpClient为一个方法,当它尝试发出第二个请求时出现以下异常:
public void run() {
String singleCommentUrl = …Run Code Online (Sandbox Code Playgroud) java exception httprequest sslhandshakeexception java-http-client
我在生产服务器上使用 Windows Server 2012 R2。我将 Web 应用程序从 4.5 升级到 .Net 5.0。现在,当我的前端应用程序与基于 .Net 5.0 构建的后端 REST API 进行通信时,随机遇到此错误:
异常[System.AggregateException:发生一个或多个错误。(无法建立 SSL 连接,请参阅内部异常。) ---> System.Net.Http.HttpRequestException:无法建立 SSL 连接,请参阅内部异常。---> System.Security.Authentication.AuthenticationException:身份验证失败,因为远程方发送了 TLS 警报:“HandshakeFailure”。---> System.ComponentModel.Win32Exception (0x80090326): 收到的消息是意外的或格式错误。
--- 内部异常堆栈跟踪结束 ---
我已经在我的应用程序中使用了以下代码行:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
Run Code Online (Sandbox Code Playgroud) ssl ×5
android ×2
java ×2
.net-5 ×1
apachebench ×1
bouncycastle ×1
certificate ×1
encryption ×1
exception ×1
httprequest ×1
rest-assured ×1
resttemplate ×1
scala ×1
svn ×1
tls1.0 ×1
tls1.2 ×1
tomcat7 ×1
tortoisesvn ×1