2009-09-05 3 views
4

내가 수행 할 때일방적 인 SSL은 XP에 Lispworks에서

 
CL-USER 489 > (cl+ssl:make-ssl-client-stream (cl+ssl:stream-fd *standard-output*)) 

내가 얻을 :

 
Error: A failure in the SSL library occurred on handle #. (Return code: 1)SSL error queue: error:140C5042:SSL routines:SSL_UNDEFINED_FUNCTION:called a function you should not call 

내가 잘못이 뭔가인가?

+0

. 에서 dll 파일? 나도 일하는 조합을 찾을 수 없었다. – Marko

답변

1

여기에는 두 가지 가능성이 있습니다.

스트림을 만들기 전에 호출해야하는 초기화 함수를 호출하는 것을 잊었거나 CL + SSL에 버그가 있습니다. 아마도 Lispworks 나 Windows XP (아마도 후자 임)에만 나타나는 버그 일 수 있습니다.

CL + SSL 테스트 스위트가 문제없이 실행됩니까?

편집 : SBCL/Linux에서이 오류를 테스트했는데 동일한 오류가 발생했습니다. 문제는 CL + SSL을 사용해야합니다.

+0

시도해 주셔서 감사합니다. 나는 이것이 아무도 SSL을 위해 CL + SSL을 사용하지 않는다고 추측한다. 나는 그들이 무엇을 사용하고 있는지 궁금해. – Mitch

+1

실제로 CL + SSL은 CL에 대한 유일한 휴대용 SSL 패키지 인 매우 인기가 있습니다. Hunchentoot와 Drakma는 아무 문제없이 그것을 사용하고 있습니다. 예를 들어, (drakma : http-request "https://fortify.net/sslcheck.html") Drakma 소스를 확인해 보았습니다. 시도한 것과별로 다르지 않지만 반환 된 실제 TCP 스트림을 전달합니다 comm : open-tcp-stream (Lispworks) 또는 usocket : socket-connect (다른 곳). 그래서 CL + SSL이 정상적이라고 결론을 내렸지 만 올바르게 사용하는 방법을 찾아야합니다. – skypher

+0

Ugh, Stack Overflow 내 코멘트 텍스트 :/Drakma 테스트 URI 앞에 https 및 : //를 넣고 닫는 따옴표 다음에 세미콜론을 제거해야합니다. – skypher

1

여기서 오류 메시지는 도움이되지 않습니다. 여기서 진정한 문제는 CL + SSL이 옥텟 스트림을 기대하는 반면 Common Lisp의 기본 표준 입력 스트림은 문자 스트림이라는 점입니다. 대신 옥텟 스트림을 사용해보십시오. 이것은 리눅스에서 SBCL에서 작동합니다 :

(let ((stdin (sb-sys:make-fd-stream 0 
       :input t :buffering :full 
       :element-type '(unsigned-byte 8))) 
    (cl+ssl:make-ssl-client-stream (cl+ssl:stream-fd stdin))) 

이 유닉스 나 윈도우에서 같은 트릭을 수행하는 방법에 확실하지 않다 파일 기술자 0으로 사용할 표준 입력을 가지고 있다는 사실에 의존한다. 실제 응용 프로그램에 대한

, 당신은 아마 정말 표준 입력에서 작동하지 않으려는, 이런 일이 usocket 라이브러리를 사용하여 작동합니다 : 당신이 libssl32.dll과 libeay32 거지

(let ((sock (usocket:socket-connect host port :element-type '(unsigned-byte 8)))) 
    (cl+ssl:make-ssl-client-stream (usocket:socket-stream sock))) 
+0

실제로'(let ((sock (usocket : socket-connect) www.google.com "80 : 요소 유형 (부호없는 바이트 8)))) (cl + ssl : make-ssl-client-stream ' 여전히 동일한 오류가 발생합니다. –

+0

HTTP를 통한 SSL에 포트 443을 사용하는 방법은 어떻습니까? –

관련 문제