hunchentoot 用 ssl 定义简单的处理程序?
hunchentoot define-easy-handler with ssl?
我一直使用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 和 :[=23 的文件=]SSL-私钥文件。我已经尝试了上面的各种参数来完成这项工作,但似乎无法让它发挥作用。有人可以给我一个如何做到这一点的例子吗?
在此先感谢您的帮助!
这不是处理程序的功能,而是接受器的功能。您需要做的就是使用 easy-ssl-acceptor
而不是 easy-acceptor
来启动您的服务器:
(hunchentoot:start (make-instance 'hunchentoot:easy-ssl-acceptor :port 4242))
您可以保留易处理程序并更改您需要的受体类型。
(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 页面时发出警告(忽略安全异常)。
- http://localhost:8080/normal
- http://localhost:8080/secure(应该失败并返回 404)
- https://localhost:7777/normal
- https://localhost:7777/secure
另请注意,:acceptor-names
参数是 可选的 (感谢@Simeon Ikudabo),上面的示例是明确添加的。您可以只定义一个 SSL 接受器,让您的所有页面都通过安全的 link.
提供服务
我一直使用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 和 :[=23 的文件=]SSL-私钥文件。我已经尝试了上面的各种参数来完成这项工作,但似乎无法让它发挥作用。有人可以给我一个如何做到这一点的例子吗?
在此先感谢您的帮助!
这不是处理程序的功能,而是接受器的功能。您需要做的就是使用 easy-ssl-acceptor
而不是 easy-acceptor
来启动您的服务器:
(hunchentoot:start (make-instance 'hunchentoot:easy-ssl-acceptor :port 4242))
您可以保留易处理程序并更改您需要的受体类型。
(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 页面时发出警告(忽略安全异常)。
- http://localhost:8080/normal
- http://localhost:8080/secure(应该失败并返回 404)
- https://localhost:7777/normal
- https://localhost:7777/secure
另请注意,:acceptor-names
参数是 可选的 (感谢@Simeon Ikudabo),上面的示例是明确添加的。您可以只定义一个 SSL 接受器,让您的所有页面都通过安全的 link.