В этой главе основное внимание будет уделено SSL-приложению на основе CherryPy, включенному через встроенный HTTP-сервер CherryPy.
конфигурация
В веб-приложении требуются разные уровни настроек конфигурации —
-
Веб-сервер — настройки, связанные с HTTP-сервером
-
Engine — Настройки, связанные с хостингом движка
-
Приложение — приложение, которое используется пользователем
Веб-сервер — настройки, связанные с HTTP-сервером
Engine — Настройки, связанные с хостингом движка
Приложение — приложение, которое используется пользователем
развертывание
Развертывание приложения CherryPy считается довольно простым способом, когда все необходимые пакеты доступны по системному пути Python. В общедоступной веб-среде веб-сервер будет находиться во внешнем интерфейсе, что позволяет провайдеру хоста выполнять действия по фильтрации. Внешний сервер может быть Apache или lighttpd .
В этом разделе будет представлено несколько решений для запуска приложения CherryPy на веб-серверах Apache и lighttpd.
cherrypy def setup_app(): class Root: @cherrypy.expose def index(self): # Return the hostname used by CherryPy and the remote # caller IP address return "Hello there %s from IP: %s " % (cherrypy.request.base, cherrypy.request.remote.ip) cherrypy.config.update({'server.socket_port': 9091, 'environment': 'production', 'log.screen': False, 'show_tracebacks': False}) cherrypy.tree.mount(Root()) if __name__ == '__main__': setup_app() cherrypy.server.quickstart() cherrypy.engine.start()
SSL
SSL (Secure Sockets Layer) может поддерживаться в приложениях на основе CherryPy. Чтобы включить поддержку SSL, должны быть выполнены следующие требования:
- Установите пакет PyOpenSSL в среде пользователя
- Наличие SSL-сертификата и закрытого ключа на сервере
Создание сертификата и закрытого ключа
Давайте разберемся с требованиями сертификата и закрытого ключа —
- Сначала пользователю нужен закрытый ключ —
openssl genrsa -out server.key 2048
- Этот ключ не защищен паролем и поэтому имеет слабую защиту.
- Следующая команда будет выполнена —
openssl genrsa -des3 -out server.key 2048
-
Программа потребует пароль. Если ваша версия OpenSSL позволяет вам предоставить пустую строку, сделайте это. В противном случае введите парольную фразу по умолчанию, а затем удалите ее из сгенерированного ключа следующим образом:
Программа потребует пароль. Если ваша версия OpenSSL позволяет вам предоставить пустую строку, сделайте это. В противном случае введите парольную фразу по умолчанию, а затем удалите ее из сгенерированного ключа следующим образом:
openssl rsa -in server.key -out server.key
- Создание сертификата происходит следующим образом —
openssl req -new -key server.key -out server.csr
-
Этот процесс попросит вас ввести некоторые детали. Для этого необходимо ввести следующую команду:
Этот процесс попросит вас ввести некоторые детали. Для этого необходимо ввести следующую команду:
openssl x509 -req -days 60 -in server.csr -signkey server.key -out server.crt
-
Вновь подписанный сертификат будет действителен в течение 60 дней.
Вновь подписанный сертификат будет действителен в течение 60 дней.
Следующий код показывает его реализацию —
import cherrypy import os, os.path localDir = os.path.abspath(os.path.dirname(__file__)) CA = os.path.join(localDir, 'server.crt') KEY = os.path.join(localDir, 'server.key') def setup_server(): class Root: @cherrypy.expose def index(self): return "Hello there!" cherrypy.tree.mount(Root()) if __name__ == '__main__': setup_server() cherrypy.config.update({'server.socket_port': 8443, 'environment': 'production', 'log.screen': True, 'server.ssl_certificate': CA, 'server.ssl_private_key': KEY}) cherrypy.server.quickstart() cherrypy.engine.start()
Следующим шагом является запуск сервера; Если вы добились успеха, вы увидите следующее сообщение на вашем экране —