hunchentoot define-easy-handler с помощью ssl? - PullRequest
0 голосов
/ 07 июня 2018

Я все время использую define-easy-handler.Теперь у меня есть свежеиспеченный ssl-сертификат и связанные pem-файлы, но я не могу понять, что такое ssl-эквивалент deh.

Например, у меня есть:

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

, что является простой формой, чье форматирование идет здесь:

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

Я получил необходимые .pem файлы изfreecert, поэтому я думаю, что у меня есть файлы, которые идут по адресу: SSL-CERTIFICATE-FILE и: SSL-PRIVATEKEY-FILE .Я пробовал различные аргументы к вышеупомянутому, чтобы заставить это работать, но не могу заставить его работать.Может кто-нибудь дать мне пример того, как это сделать?

Заранее спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы можете сохранить ваши лёгкие обработчики и изменить тип акцептора, который вам нужен.

(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")

Если у вас нет самозаверяющего сертификата для тестов , вы можетеdo:

$ 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-страницам (игнорируйте исключение безопасности).

0 голосов
/ 08 июня 2018

Это не функция обработчиков, а акцептор.Все, что вам нужно сделать, это использовать easy-ssl-acceptor вместо easy-acceptor для запуска вашего сервера:

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