使用ssl进行hunchentoot define-easy-handler?

时间:2018-06-07 20:03:59

标签: ssl common-lisp hunchentoot

我一直使用define-easy-handler。我现在有一个刚刚铸造的ssl证书和相关的pem文件,但无法弄清楚d-e-h的ssl等价物是什么。

例如,我有:

  (hunchentoot:define-easy-handler 
   (login :uri "/login") 
   () 
   (login-html)) 

这只是一个形式如下的简单形式:

(hunchentoot:define-easy-handler 
   (dologin :uri "/dologin") 
   (email password) 
   (dologin-html email password)) 

我从freecert获得了所需的.pem文件,所以我认为我的文件包含: SSL-CERTIFICATE-FILE 和: SSL-PRIVATEKEY-FILE 即可。我已经尝试了上面的各种args来使这项工作,但似乎无法让它工作。有人能给我一个如何做到这一点的例子吗?

先谢谢你的帮助!

2 个答案:

答案 0 :(得分:4)

您可以保留易操作者并更改所需的接受者类型。

(defpackage :web (:use :cl :hunchentoot))
(in-package :web)

;; This url can be accessed by all acceptors
(define-easy-handler (no-ssl :uri "/normal") ()
  (setf (content-type*) "text/plain")
  "NORMAL PAGE")

;; This url can be accessed only by an acceptor named SSL
(define-easy-handler (ssl :uri "/secure" :acceptor-names '(ssl)) ()
  (setf (content-type*) "text/plain")
  "SECURED PAGE")

如果您没有自签名证书进行测试,您可以执行以下操作:

$ cd /tmp
$ openssl req -new -x509 -nodes -out server.crt -keyout server.key

然后,我们定义了两种接受器:

(defvar *no-ssl-acceptor*
  (make-instance 'easy-acceptor :port 8080))

(defvar *ssl-acceptor*
  (make-instance 'easy-ssl-acceptor
                 :name 'ssl
                 :port 7777
                 :ssl-privatekey-file  #P"/tmp/server.key"
                 :ssl-certificate-file #P"/tmp/server.crt"))

启动它们:

(start *ssl-acceptor*)
(start *no-ssl-acceptor*)

首次尝试访问HTTPS页面时,您的浏览器应该会抱怨(忽略安全例外)。

答案 1 :(得分:2)

这不是处理程序的功能,而是接受者的功能。您只需使用easy-ssl-acceptor代替easy-acceptor来启动服务器:

(hunchentoot:start (make-instance 'hunchentoot:easy-ssl-acceptor :port 4242))