有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

ssl与Java通信到TLSEncypted CUPS打印服务器

我正在尝试与CUPS打印服务器通信,该服务器的所有连接都设置了“需要加密”。这意味着,当您尝试建立到它的连接时,它会要求将连接升级到TLS加密的连接,并且Cups4jJspi似乎都无法处理它

有没有办法从Java应用程序连接到这样的服务器(使用这些库或其他库)


共 (1) 个答案

  1. # 1 楼答案

    您的主要问题是CUPS/IPP是很少使用HTTP到TLS升级的协议之一,如RFC 2817所述。(https://根本不使用它,请参见RFC2818。)这样做的结果是,您会发现现有库中对此升级的支持要少得多

    原则上,将普通的Socket升级为SSLSocket{a1}。但是,由于IPP依赖于HTTP,您的库使用的库可能不支持此功能,因为很少有HTTP库支持RFC2817

    我没有看过Cups4J,但是Jspi clearly relies on Apache HTTP Client(可能是3.x版)

    Support for RFC 2817 was discussed in 2011 on Apache HTTP Client mailing list,但目前还不清楚这些信息是否进入了图书馆。无论如何,Jspi代码比这要老,所以可以公平地假设它不会工作

    可能的解决方法:

    一些IPP服务器似乎通过升级(RFC 2817)或通过初始连接(RFC 2818,传统的https://方式)支持这两种TL。也许你的也是。检查它是否侦听TLS连接的其他端口(例如,通过将HTTPS客户端指向它)。(如果服务器使用端口统一,也可以是同一端口。)

    如果这样做有效,Jspi中IppHttpConnection.java的快速修补程序应使您能够使用https://连接而不是http://连接:

    private static URI toHttpURI(URI uri) {
        if (uri.getScheme().equals("ipp")) {
            String uriString = uri.toString().replaceFirst("ipp", "http");
    

    我不确定ipps://是否是标准的,但是您可以使用相同的技巧,在方案中用https://替换ipps://。其余的应该由底层HTTP库自动处理。(您可能还必须确保您的证书是可信的,但这是另一个问题。)