Java 连接/验证基于XML的Ruby on Rails网站的安全性时出现问题
我在连接基于XML的RubyonRails网站时遇到了很大的问题 我尝试过多种方法,但不管怎样,我总是会遇到这样或那样的问题 我需要做的是,连接到一个网站,发布登录和密码,然后从网站获取返回值(看看登录是否成功)。在某种程度上,它将成为一个Android应用程序,但在一开始,我只希望它能在Java中工作 我目前的做法是(为隐藏IP而道歉):Java 连接/验证基于XML的Ruby on Rails网站的安全性时出现问题,java,android,ruby-on-rails,xml,Java,Android,Ruby On Rails,Xml,我在连接基于XML的RubyonRails网站时遇到了很大的问题 我尝试过多种方法,但不管怎样,我总是会遇到这样或那样的问题 我需要做的是,连接到一个网站,发布登录和密码,然后从网站获取返回值(看看登录是否成功)。在某种程度上,它将成为一个Android应用程序,但在一开始,我只希望它能在Java中工作 我目前的做法是(为隐藏IP而道歉): publicstaticvoidconnect(){ @SuppressWarnings({“弃用”、“资源”}) HttpClient HttpClien
publicstaticvoidconnect(){
@SuppressWarnings({“弃用”、“资源”})
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“https://93...145/login");
List nameValuePair=新的ArrayList(2);
添加(新的BasicNameValuePair(“登录”,“名称”));
添加(新的BasicNameValuePair(“密码”、“密码”));
试一试{
setEntity(新的UrlEncodedFormEntity(nameValuePair));
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
试一试{
HttpResponse response=httpClient.execute(httpPost);
//将响应写入日志
System.out.println(“Http Post响应:+Response.toString());
//Log.d(“Http Post响应:,Response.toString());
}捕获(客户端协议例外e){
//日志异常
e、 printStackTrace();
}捕获(IOE异常){
//日志异常
e、 printStackTrace();
}
}
该网站是一个开发服务器,因此我在打开页面时会收到“无效证书”消息,这在Java中会造成更大的问题。我使用以下方法成功生成“有效”证书:
但我还有一个问题:
javax.net.ssl.SSLException: Certificate for <93...145> doesn't match common name of the certificate subject: dev-...no
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:172)
at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:61)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:140)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:114)
at org.apache.http.conn.ssl.SSLSocketFactory.verifyHostname(SSLSocketFactory.java:569)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:544)
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)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
at Tilkobling.connect(Tilkobling.java:133)
at Tilkobling.main(Tilkobling.java:33)
javax.net.ssl.SSLException:的证书与证书主题的通用名称不匹配:dev-…否
位于org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:172)
位于org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:61)
位于org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:140)
位于org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:114)
位于org.apache.http.conn.ssl.SSLSocketFactory.verifyHostname(SSLSocketFactory.java:569)
位于org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:544)
位于org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:409)
位于org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
位于org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
位于org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
位于org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446)
位于org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
在org.apache.http.impl.client.CloseableHttpClient.execute上(CloseableHttpClient.java:82)
在org.apache.http.impl.client.CloseableHttpClient.execute上(CloseableHttpClient.java:107)
在org.apache.http.impl.client.CloseableHttpClient.execute上(CloseableHttpClient.java:55)
在Tilkobling.connect(Tilkobling.java:133)
位于Tilkobling.main(Tilkobling.java:33)
那么基本上,有没有更简单的方法
我想做的其实很简单:
任何输入都将不胜感激。Hmm,您尝试发送HTTPS请求,但url包含IP而不是域。HTTPS客户端似乎无法验证您的自签名证书,因为证书包含服务器域,但您使用的是IP。要使用HTTPS,您需要有域名或使用假域名(请参阅)
javax.net.ssl.SSLException: Certificate for <93...145> doesn't match common name of the certificate subject: dev-...no
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:172)
at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:61)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:140)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:114)
at org.apache.http.conn.ssl.SSLSocketFactory.verifyHostname(SSLSocketFactory.java:569)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:544)
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)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
at Tilkobling.connect(Tilkobling.java:133)
at Tilkobling.main(Tilkobling.java:33)