小编rau*_*uch的帖子

如何使用Apache HttpClient处理无效的SSL证书?

我知道,关于这个问题有很多不同的问题和很多答案...但我无法理解......

我有:ubuntu-9.10-desktop-amd64 + NetBeans6.7.1从"关闭"安装.代表.我需要通过HTTPS连接到某个站点.为此我使用Apache的HttpClient.

从教程我读到:

"一旦正确安装了JSSE,通过SSL进行安全的HTTP通信
就像普通的HTTP通信一样简单." 还有一些例子:

HttpClient httpclient = new HttpClient();
GetMethod httpget = new GetMethod("https://www.verisign.com/"); 
try { 
  httpclient.executeMethod(httpget);
  System.out.println(httpget.getStatusLine());
} finally {
  httpget.releaseConnection();
}
Run Code Online (Sandbox Code Playgroud)

到现在为止,我写道:

HttpClient client = new HttpClient();

HttpMethod get = new GetMethod("https://mms.nw.ru");
//get.setDoAuthentication(true);

try {
    int status = client.executeMethod(get);
    System.out.println(status);

    BufferedInputStream is = new BufferedInputStream(get.getResponseBodyAsStream());
    int r=0;byte[] buf = new byte[10];
    while((r = is.read(buf)) > 0) {
        System.out.write(buf,0,r);
    }

} catch(Exception ex) {
    ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

结果我有一组错误:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable …
Run Code Online (Sandbox Code Playgroud)

java ssl https apache-commons-httpclient

120
推荐指数
8
解决办法
29万
查看次数

我应该如何正确处理Python3中的异常

我无法理解我应该处理什么样的异常'此处和现在',以及我应该重新提出或者在这里不处理的异常,以及稍后如何处理它们(在更高层).例如:我使用python3和ssl通信编写了客户端/服务器应用程序.客户端应该验证有关它们的任何差异的文件,如果diff存在,那么它应该将此"更新"文件发送到服务器.


class BasicConnection:
    #blablabla
    def sendMessage(self, sock, url, port, fileToSend, buffSize):
        try:
            sock.connect((url, port))
            while True:
                data = fileToSend.read(buffSize)
                if not data: break
                sock.send(data)
            return True
        except socket.timeout as toErr:
            raise ConnectionError("TimeOutError trying to send File to remote socket: %s:%d"
                                  % (url,port)) from toErr
        except socket.error as sErr:
            raise ConnectionError("Error trying to send File to remote socket: %s:%d"
                                  % (url,port)) from sErr
        except ssl.SSLError as sslErr:
            raise ConnectionError("SSLError trying to send File to remote socket: %s:%d"
                                  % (url,port)) from sslErr …
Run Code Online (Sandbox Code Playgroud)

python logging exception

12
推荐指数
1
解决办法
1万
查看次数

如何在本地使用activemq?

我无法理解如何在本地使用ActiveMQ.
假设我有2台机器,需要交换一些消息.
在机器上我启动ActiveMQ代理:

> ~/bin/activemq
Run Code Online (Sandbox Code Playgroud)

并使用类似的东西:

    javax.naming.Context ctx = new InitialContext();

    TopicConnectionFactory factory = (TopicConnectionFactory)ctx.lookup("connectionFactory");
    conn = factory.createTopicConnection();

    TopicSession session = conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE);
    Topic topic = null;
    try{
        topic = (Topic)ctx.lookup("MyTopic");
        System.out.println("MyTopic was found");
    }catch(NameNotFoundException nnfe){
        topic = session.createTopic("MyTopic");
        System.out.println("MyTopic was created");
    }
    TextMessage textMessage = session.createTextMessage();
    TopicPublisher publisher = session.createPublisher(topic);
    conn.start();

    textMessage.setText("My topic message number");
    publisher.publish(textMessage);
    System.out.println("sendMessage2topic");
Run Code Online (Sandbox Code Playgroud)

我在jndi.properties中的位置:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://localhost:61616
Run Code Online (Sandbox Code Playgroud)

但是我应该在另一台机器上创建什么来订阅这个主题?Shoul我在第二台机器上创建第二个本地ActiveMQ代理,以及如何订阅第一台机器上的远程主题???

java activemq-classic jms

10
推荐指数
2
解决办法
1万
查看次数

Apache HttpClient抛出NoClassDefFoundError

我有:ubuntu-9.10-desktop-amd64 + NetBeans6.7.1

  1. 我刚从http://hc.apache.org/downloads.cgi下载了"Commons HttpClient 3.1(legacy)" .
  2. 我使用IDE NetBeans创建了新的应用程序.
  3. 我专注于项目 - >库 - >添加JAR /文件夹,这里添加了commons-httpclient-3.1.jar
  4. 到现在为止,我可以写"import org.apache.commons.httpclient.*;" 还行吧.
  5. 但是,如果我尝试添加包含以下内容的任何语句:

    public static void main(String[] args) {
        HttpClient client = new HttpClient();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  6. 编译得很好.

  7. 但是当我运行这个项目时,我收到以下错误:

    ***Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
        at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:66)
        at SimplestAppl.Main.main(Main.java:22)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
        ... 2 more
    Java Result: 1***
    
    Run Code Online (Sandbox Code Playgroud)

怎么了?

我试着下载"HttpClient 4.0(GA)".但结果是一样的.

java httpclient

7
推荐指数
2
解决办法
2万
查看次数

在Python ssl客户端/服务器的情况下自动输入密码短语

我需要创建客户端/服务器应用程序以将文件从客户端发送到服务器.我使用简单的ssl套接字并使用证书进行身份验证.

 
ms = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(ms,
                           keyfile=".../newCA/my_client.key",
                           certfile=".../newCA/my_client.crt",
                           server_side=0,
                           cert_reqs=ssl.CERT_REQUIRED,
                           ca_certs=".../newCA/CA/my-ca.crt"
                           )
ssl_sock.connect((HOST, MPORT))
Run Code Online (Sandbox Code Playgroud)

和服务器端:


msock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.ssl_sock = ssl.wrap_socket(msock,
                           keyfile=".../newCA/my_server.key",
                           certfile=".../newCA/my_server.crt",
                           server_side=1,
                           cert_reqs=ssl.CERT_REQUIRED,
                           ca_certs=".../newCA/CA/my-ca.crt"
                           )
        self.ssl_sock.bind(('', self.PORT))
        self.ssl_sock.listen(self.QUEUE_MAX)
Run Code Online (Sandbox Code Playgroud)

问题如下:当客户端尝试连接到服务器时,它需要输入两者的私钥密码:对于服务器端和客户端.

  • 在Java中我们需要设置系统属性:javax.net.ssl.keyStorePassword =""并且它必须自动使用,但是如何在Python中使用它?我无法在客户端连接时输入密码短语.

问题是我的Application:Client应该使用已经签名的证书,而Server也应该使用已签名的证书.我无法改变它.Serever和客户都是长期应用程序,所以我们只运行它,我们不需要寻找它们.但是,据我所知,Python没有提供自动输入私钥密码的标准方法.可能是其他建议?

python sockets ssl certificate

5
推荐指数
2
解决办法
7870
查看次数

可以从javascript调用非静态gwt java方法

一般目标:从javascript调用一些非静态java方法

描述:在Java Applet代码中查找DOM上的gwt小部件并调用它的java方法(非静态)


JSObject win = JSObject.getWindow(this);
JSObject doc = (JSObject) win.getMember("document");
JSObject gwtWidget = (JSObject) doc.call("getElementsByName", widgetName);

//todo: have possibility to call `exported` java method over here, smth like:
//Object[] params = new Object[1];
//params[0] = widgetName;
//Object result = gwtWidget.call("exportedJavaMethod", params);

//todo: or just call global ($wnd) static JSNI bridge method:
//Object result = win.call("exportedJavaMethod", params);
//
Run Code Online (Sandbox Code Playgroud)

问题是:我可以通过widget的id找到不是widget,但是它的DivElement没有任何导出的实例化方法.

我的widget类是Exportable(gwt-export):


@Export(value="somewidget")
public class SomeWidget extends SimplePanel implements ..., Exportable {
    private final String id = "id_some_widget_" + count++;
    private …
Run Code Online (Sandbox Code Playgroud)

javascript java gwt jsni exporter

2
推荐指数
1
解决办法
3741
查看次数