2014-02-20 15 views
0

모든 연결에 대해 "암호화 필요"가 설정된 CUPS 인쇄 서버와 통신하려고합니다. 즉, 연결을 설정하려고하면 연결을 TLS로 암호화 된 연결로 업그레이드하라는 메시지가 표시되고 Cups4j이나 Jspi도 처리 할 수없는 것입니다.TLS 암호화 된 CUPS 인쇄 서버에 Java와 통신

Java 응용 프로그램에서 이러한 서버에 연결할 수있는 방법이 있습니까?

답변

0

주요 문제는 CUPS/IPP가 RFC 2817에 설명 된대로 HTTP에서 TLS로 업그레이드하는 희귀 한 프로토콜 중 하나라는 것입니다. (https://은 RFC 2818을 참조하십시오.) 즉,이 업그레이드를 위해 기존 라이브러리에서 훨씬 적은 지원을 찾을 수 있습니다.

원칙적으로 일반 SocketSSLSocketisn't too difficult으로 업그레이드하십시오. 그러나 IPP는 HTTP에 의존하기 때문에 RFC 라이브러리를 지원하는 HTTP 라이브러리가 거의 없기 때문에 라이브러리가 사용하는 라이브러리가 지원하지 않을 수 있습니다.

저는 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:// 방법)을 통해 모두 TLS를 지원하는 것. 아마 너도 마찬가지야. TLS 연결을 위해 다른 포트를 청취하는지 확인합니다 (예 : HTTPS 클라이언트를 가리킴). (서버 포트 통일을 사용하는 경우에도 동일한 포트 수 있습니다.)

이 그것을 https:// 연결 대신 http:// 연결 사용 할 수 있도록해야한다 Jspi에 IppHttpConnection.java에 빠른 패치를 작동하는 경우 :

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

ipps://이 표준인지 확실하지 않지만 동일한 트릭을 사용하여 ipps://https://으로 바꿀 수 있습니다. 나머지는 기본 HTTP 라이브러리에 의해 자동으로 처리되어야합니다. (인증서가 신뢰할 수 있는지 확인해야 할 수도 있지만 다른 문제입니다.)