使用CL + SSL包的单边SSL

时间:2009-09-05 13:23:40

标签: ssl lisp common-lisp

在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

这是我做错了吗?

2 个答案:

答案 0 :(得分:1)

这里有两种可能性。

要么你忘记调用一些你应该在制作流之前调用的初始化函数,或者在CL + SSL中有一个错误,可能只有Lispworks或Windows XP上的错误(可能是后者)。

CL + SSL测试套件运行没有任何问题吗?

编辑:刚刚在SBCL / Linux上测试了这个,同样的错误。问题必须是CL + SSL。

答案 1 :(得分:1)

此处的错误消息没有帮助。我认为这里真正的问题是CL + SSL需要一个八位字节流,而Common Lisp中的基本标准输入流是一个字符流。尝试使用八位字节流。这应该适用于Linux上的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)))

这依赖于Unix将标准输入作为文件描述符0提供的事实。我不确定如何在Windows上执行这样的技巧。

对于一个真正的应用程序,你可能真的不想使用标准输入,使用usocket库就可以使用这样的东西:

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