Следующая команда:
openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout example.key -out example.crt -subj "/CN=example.com" -days 3650
создает сертификат для домена example.com
, который
3650
дней (~ 10 лет). Он создает следующие файлы:
example.key
example.crt
Поскольку вся информация предоставляется в командной строке, нет раздражающего интерактивного ввода. Кроме того, все эти шаги выполняются одним единственным вызовом OpenSSL: от создания секретного ключа до самозаверяющего сертификата.
Поскольку сертификат самоподписан и должен быть принят пользователями вручную,
В будущем вам может понадобиться больше, чем 4096
бит для ключа RSA и алгоритм хеширования, более сильный, чем sha256
, но с 2018 года это нормальные значения.
Примечание: Теоретически вы можете оставить параметр -nodes
(что означает «отсутствие шифрования DES»), в какой случай example.key
будет зашифрован паролем. Тем не менее, это почти никогда не бывает полезно для установки сервера, потому что вам нужно будет либо хранить пароль на сервере, либо вам придется вводить его вручную при каждой перезагрузке.
Звучит так, как будто вы не запрашиваете универсальный декоратор заметок (т. Е. Вас не интересует общий случай, когда вы хотите кешировать возвращаемые значения для разных значений аргументов). То есть, вы хотели бы иметь это:
x = obj.name # expensive
y = obj.name # cheap
, в то время как декоратор напоминания общего назначения даст вам следующее:
x = obj.name() # expensive
y = obj.name() # cheap
Я утверждаю, что синтаксис вызова метода - лучший стиль, потому что он предполагает возможность дорогостоящих вычислений, в то время как синтаксис свойства предполагает быстрый поиск.
[Обновление: декоратор памятки на основе классов, на который я ссылался и который цитировал здесь ранее, не работает для методов. Я заменил его функцией декоратора.] Если вы хотите использовать универсальный декоратор напоминания, вот простой:
def memoize(function):
memo = {}
def wrapper(*args):
if args in memo:
return memo[args]
else:
rv = function(*args)
memo[args] = rv
return rv
return wrapper
Пример использования:
@memoize
def fibonacci(n):
if n < 2: return n
return fibonacci(n - 1) + fibonacci(n - 2)
Другой декоратор памятки с ограничением размера кеша может можно найти здесь .
Ах, просто нужно было найти правильное имя для этого: « Ленивая оценка свойства ».
Я тоже так много делаю; возможно я когда-нибудь воспользуюсь этим рецептом в своем коде.
Есть еще один пример Memoize декоратор на Python Wiki:
http://wiki.python.org/moin/pythondecoratorlibrary_meamoize
Этот пример немного умна, Поскольку оно не будет кэшировать результаты, если параметры смеются. (Проверьте этот код, это очень просто и интересно!)