一个django可重用的应用程序,提供了使用django模板系统发送pgp加密和多部分电子邮件的能力。
django-secure-mail的Python项目详细描述
…图片::https://travis-ci.org/blag/django-secure-mail.svg?branch=master
:目标:https://travis ci.org/blag/django secure mail
…图片::https://coveralls.io/repos/github/blag/django secure mail/badge.svg
:目标:https://coveralls.io/github/blag/django secure mail
从
`` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `.com/stephen_mcd>;``简介
==
django secure mail是一款django可重复使用的应用程序,提供一个邮件后端,使用pgp发送有机会签名和加密的电子邮件。还提供了
模型和用于管理上载的pgp密钥的管理页。
请注意,提供的后端仅在收件人已上载有效公钥时对传出邮件进行签名。没有有效公钥的用户将*没有对其传出邮件进行签名或加密。
django安全邮件直接来自pypi
,使用"pip<;https://pip.pypa.io/en/stable/>;"`,方法是运行下面的命令
。代码块::bash
$pip install django secure mail
代码块::bash
$python setup.py install
将"安全邮件"添加到"已安装的应用程序"设置并运行数据库
迁移:
…代码块:bash
$python manage.py迁移安全邮件
>2。将设置模块中的"email_backend"设置为
"secure_mail.backends.encryptingsmtpemailbackend"或"development and testing"3中列出的
开发/测试后端之一。将"secure_mail_gnupg_home"设置设置为包含
gpg密钥环的目录。如果运行多个django节点,则每个节点都需要对该目录的
read*和write*访问权限。
4。将"secure-mail-gnupg-encoding"变量设置为gpg
可执行文件所需的编码。对于gpg 1.x,这通常是"拉丁语-1";对于gpg 2.x,这通常是"utf-8"。
5。由于不需要发送加密邮件,因此强烈建议为传出邮件生成签名密钥。请按照"生成签名密钥"部分中的
说明进行操作。所有将要发送传出邮件的节点都需要对"secure\u mail\u gnupg\u home"指定的目录具有读取权限。
还有其他配置选项可用。有关完整的列表,请参见"选项"部分。
评估并导出签名密钥:``电子邮件签名密钥`。
首先需要在
项目的``settings.py``中设置``安全邮件签名密钥数据``选项。这是一个直接作为关键字参数传递给"gpg.gen_key()`"的字典,因此请阅读并理解其文档中的所有可用选项<;https://pythonhosted.org/python gnupg/\generating keys>;`。默认设置为:
…代码块::python
安全邮件签名密钥数据={
密钥类型:"rsa",
"密钥长度":4096,
"名称真实":设置。站点名称,
"名称注释":"发送电子邮件服务器",
"名称电子邮件":设置。默认来自电子邮件,
"过期日期":"2y",
}
/>例如dsa或过期日期。
满足签名密钥设置后,使用`--generate``选项生成新的签名密钥:
。代码块::bash
$python manage.py email_signing_key--generate
代码块::bash
$python manage.py电子邮件签名密钥7ab59fe794a7ac12eba87507ef33f601153cfe28
代码块::bash
$python manage.py电子邮件签名密钥7ab59fe794a7ac12eba87507ef33f601153cfe28--打印私钥
电话:
…代码块::bash
$python manage.py电子邮件签名密钥7ab59fe794a7ac12eba87507ef33f601153cfe28-k keys.ubuntu.com keys.redhat.com-k pgp.mit.edu
代码块::bash
$python manage.py email-signing-key--generate--keyserver pgp.mit.edu--print private key
使用`--help``选项查看命令的完整帮助文本。
``使用它。将"安全邮件密钥指纹"设置设置为要使用的传出签名密钥的指纹。
options
----
您可以在项目的
``settings.py``模块中配置一些设置:
*``secure` mail` u gnupg` home`-表示gnupg密钥环的自定义位置的字符串。如果运行多个django节点,则应将其设置为所有节点共享的目录,并且所有节点上的可执行文件"gpg"都需要对其进行读写访问。
*"secure"mail"使用"gnupg"布尔值,该布尔值控制是否使用pgp
加密功能。如果指定了"secure-mail-gnupg-home",则默认为"true",否则为"false"。
*"secure-mail-gnupg-encoding"是本地"gpg"可执行文件所需的编码。此选项传递给"str.encode"函数。在
常规中,对于gpg 1.x,它应该设置为"latin-1",对于gpg 2.x,它应该设置为"utf-8"。查看
"python gnupg文档"lt;https://pythonhosted.org/python gnupg/"入门">;`"python gnupg文档"了解更多信息。
*`"安全邮件失败处理程序"`-映射失败类型的字典错误处理程序的
点路径表示法。有关
的详细信息和示例,请参见"错误处理"部分。
*``安全邮件始终信任密钥``-跳过密钥验证,并假设使用的
密钥始终完全可信。这只需设置`--always trust``(或
`--trust model`,用于更现代的gpg版本)。有关此设置的详细信息,请参阅gpg文档
中的`--trust model``选项。
*``secure`mail`signing`u key`data`-用于生成
新签名密钥的密钥选项字典。有关详细信息,请参见
`python gnupg文档https://pythonhosted.org/python gnupg`.
默认值:
。代码块::python
{
"密钥类型":"rsa",
"密钥长度":4096,
"名称真实":设置。站点名称,
"名称注释":"发送电子邮件服务器",
"名称电子邮件":设置。默认来自电子邮件,
"过期"_日期':'2y',
}
*``安全邮件密钥指纹``签名时要使用的密钥指纹传出邮件,必须存在于配置的密匙环中。
>发送pgp加密邮件
这意味着
如果将邮件发送给在
数据库和gpg/pgp密匙环中具有有效公钥的收件人,则后端将尝试对发送给他们的邮件进行签名和加密。
当加密
对以下对象失败时,自定义错误处理程序:
*纯文本邮件本身
*任何邮件附件
*任何可选邮件(例如:使用纯文本发送的HTML邮件
回退)
异常时调用错误处理程序引发并传递引发的异常。代码块::python
def handle_failed_encryption(异常):
默认错误处理程序只需重新引发异常,但这对于所有情况来说都是不可取的。
为了帮助处理错误,包提供了一些可以在自定义错误处理程序中使用的帮助函数:
*`` force_send_message``-接受未加密的message作为参数,
发送消息而不尝试对其进行加密或签名。
*`` force\u delete\u key`-接受收件人的地址作为参数,
强制从数据库和gpg/pgp密匙环中删除所有密钥。
*`` force\u mail\u admins`-接受未加密的消息和失败的
地址作为参数。如果地址处于"admins"设置中,则发送未加密的消息,否则,将向管理员发送一条消息,其中包含
原始消息的主题和原始预期收件人。
*``从"exception"获取"variable"--接受异常和变量名
作为参数,然后回溯stacktrace以查找具有指定名称的第一个
变量。
若要指定自定义错误处理程序,请在项目的
``setting s.py``设置字典中的
``secure\u mail\u failure\u handlers``中将键设置为ER的点路径错误处理程序:
…代码块::python
secure\u mail\u failure\u handlers={
'message':'myapp.handlers.handle\u failed\u encryption',
'alternative':'myapp.handlers.handle\u failed\u alternative\u encryption',
'attachment':'myapp.handlers.handle\u failed\u attachment\u encryption',
}
不必覆盖所有处理程序,您可以根据需要覆盖任意多个或任意少个处理程序。
或者创建自己的自定义后端:
…代码块::python
class encryptinglocmememailbackend(encryptingemailbackend,locmembackend):
pass
对于在另一个django应用程序中使用"encryptingemailbackendmixin"的实际工作示例,请查看"emailhub.backends.secure"mail.encryptingemailbackendmixin``来自
`django emailhub<;https://github.com/fixme/django emailhub>;``项目:
除了提供的``encryptingsmtpemailbackend``之外,此包还附带了几个后端,这些后端反映了内置的django后端:
*``encryptingconsoleemailbackend``
*``encryptinglocmememailbackend``
*``encryptingfilebasedemailbackend``
>数据库模型
----
`pgp解释<;https://en.wikipedia.org/wiki/pretty嫒good嫒u privacy>使用python gnupg,在secure-mail.models`-
``key``和``address``中定义了两个模型,它们分别表示pgp密钥和成功导入的密钥的电子邮件地址。这些模型的存在纯粹是为了通过django
管理导入
密钥并删除特定地址的密钥。
添加密钥时,密钥将导入服务器上的密钥环,并且不会保存"密钥"模型的实例。密钥的
电子邮件地址也会被提取并保存为一个
``address``实例。
`address``模型在发送电子邮件时用于检查
现有密钥以确定是否应加密电子邮件。
密钥已从服务器上的密钥环中删除。
可选的django应用程序
=====
>其他具有类似功能的django应用程序有:
*`django email extras<;https://github.com/stephenmcd/django email extras>;`-
提供两个功能用于使用django的模板系统发送pgp加密的多部分电子邮件的ons。还提供一个邮件后端,在开发期间在浏览器中显示html
邮件。
*`django gnupg mail s<;https://github.com/jandd/django gnupg mails>;`-
提供一个``gnupgmessage``(django的``emailmessage``的子类)来发送
pgp/mime签名的电子邮件。
bot其中h个应用程序要求第三方应用程序开发人员"选择加入"发送
加密邮件。此项目自动对所有应用程序的所有传出邮件进行加密和签名。
:目标:https://travis ci.org/blag/django secure mail
…图片::https://coveralls.io/repos/github/blag/django secure mail/badge.svg
:目标:https://coveralls.io/github/blag/django secure mail
从
`` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `.com/stephen_mcd>;``简介
==
django secure mail是一款django可重复使用的应用程序,提供一个邮件后端,使用pgp发送有机会签名和加密的电子邮件。还提供了
模型和用于管理上载的pgp密钥的管理页。
请注意,提供的后端仅在收件人已上载有效公钥时对传出邮件进行签名。没有有效公钥的用户将*没有对其传出邮件进行签名或加密。
django安全邮件直接来自pypi
,使用"pip<;https://pip.pypa.io/en/stable/>;"`,方法是运行下面的命令
。代码块::bash
$pip install django secure mail
代码块::bash
$python setup.py install
将"安全邮件"添加到"已安装的应用程序"设置并运行数据库
迁移:
…代码块:bash
$python manage.py迁移安全邮件
>2。将设置模块中的"email_backend"设置为
"secure_mail.backends.encryptingsmtpemailbackend"或"development and testing"3中列出的
开发/测试后端之一。将"secure_mail_gnupg_home"设置设置为包含
gpg密钥环的目录。如果运行多个django节点,则每个节点都需要对该目录的
read*和write*访问权限。
4。将"secure-mail-gnupg-encoding"变量设置为gpg
可执行文件所需的编码。对于gpg 1.x,这通常是"拉丁语-1";对于gpg 2.x,这通常是"utf-8"。
5。由于不需要发送加密邮件,因此强烈建议为传出邮件生成签名密钥。请按照"生成签名密钥"部分中的
说明进行操作。所有将要发送传出邮件的节点都需要对"secure\u mail\u gnupg\u home"指定的目录具有读取权限。
还有其他配置选项可用。有关完整的列表,请参见"选项"部分。
评估并导出签名密钥:``电子邮件签名密钥`。
首先需要在
项目的``settings.py``中设置``安全邮件签名密钥数据``选项。这是一个直接作为关键字参数传递给"gpg.gen_key()`"的字典,因此请阅读并理解其文档中的所有可用选项<;https://pythonhosted.org/python gnupg/\generating keys>;`。默认设置为:
…代码块::python
安全邮件签名密钥数据={
密钥类型:"rsa",
"密钥长度":4096,
"名称真实":设置。站点名称,
"名称注释":"发送电子邮件服务器",
"名称电子邮件":设置。默认来自电子邮件,
"过期日期":"2y",
}
/>例如dsa或过期日期。
满足签名密钥设置后,使用`--generate``选项生成新的签名密钥:
。代码块::bash
$python manage.py email_signing_key--generate
代码块::bash
$python manage.py电子邮件签名密钥7ab59fe794a7ac12eba87507ef33f601153cfe28
代码块::bash
$python manage.py电子邮件签名密钥7ab59fe794a7ac12eba87507ef33f601153cfe28--打印私钥
电话:
…代码块::bash
$python manage.py电子邮件签名密钥7ab59fe794a7ac12eba87507ef33f601153cfe28-k keys.ubuntu.com keys.redhat.com-k pgp.mit.edu
代码块::bash
$python manage.py email-signing-key--generate--keyserver pgp.mit.edu--print private key
使用`--help``选项查看命令的完整帮助文本。
``使用它。将"安全邮件密钥指纹"设置设置为要使用的传出签名密钥的指纹。
options
----
您可以在项目的
``settings.py``模块中配置一些设置:
*``secure` mail` u gnupg` home`-表示gnupg密钥环的自定义位置的字符串。如果运行多个django节点,则应将其设置为所有节点共享的目录,并且所有节点上的可执行文件"gpg"都需要对其进行读写访问。
*"secure"mail"使用"gnupg"布尔值,该布尔值控制是否使用pgp
加密功能。如果指定了"secure-mail-gnupg-home",则默认为"true",否则为"false"。
*"secure-mail-gnupg-encoding"是本地"gpg"可执行文件所需的编码。此选项传递给"str.encode"函数。在
常规中,对于gpg 1.x,它应该设置为"latin-1",对于gpg 2.x,它应该设置为"utf-8"。查看
"python gnupg文档"lt;https://pythonhosted.org/python gnupg/"入门">;`"python gnupg文档"了解更多信息。
*`"安全邮件失败处理程序"`-映射失败类型的字典错误处理程序的
点路径表示法。有关
的详细信息和示例,请参见"错误处理"部分。
*``安全邮件始终信任密钥``-跳过密钥验证,并假设使用的
密钥始终完全可信。这只需设置`--always trust``(或
`--trust model`,用于更现代的gpg版本)。有关此设置的详细信息,请参阅gpg文档
中的`--trust model``选项。
*``secure`mail`signing`u key`data`-用于生成
新签名密钥的密钥选项字典。有关详细信息,请参见
`python gnupg文档https://pythonhosted.org/python gnupg`.
默认值:
。代码块::python
{
"密钥类型":"rsa",
"密钥长度":4096,
"名称真实":设置。站点名称,
"名称注释":"发送电子邮件服务器",
"名称电子邮件":设置。默认来自电子邮件,
"过期"_日期':'2y',
}
*``安全邮件密钥指纹``签名时要使用的密钥指纹传出邮件,必须存在于配置的密匙环中。
>发送pgp加密邮件
这意味着
如果将邮件发送给在
数据库和gpg/pgp密匙环中具有有效公钥的收件人,则后端将尝试对发送给他们的邮件进行签名和加密。
当加密
对以下对象失败时,自定义错误处理程序:
*纯文本邮件本身
*任何邮件附件
*任何可选邮件(例如:使用纯文本发送的HTML邮件
回退)
异常时调用错误处理程序引发并传递引发的异常。代码块::python
def handle_failed_encryption(异常):
默认错误处理程序只需重新引发异常,但这对于所有情况来说都是不可取的。
为了帮助处理错误,包提供了一些可以在自定义错误处理程序中使用的帮助函数:
*`` force_send_message``-接受未加密的message作为参数,
发送消息而不尝试对其进行加密或签名。
*`` force\u delete\u key`-接受收件人的地址作为参数,
强制从数据库和gpg/pgp密匙环中删除所有密钥。
*`` force\u mail\u admins`-接受未加密的消息和失败的
地址作为参数。如果地址处于"admins"设置中,则发送未加密的消息,否则,将向管理员发送一条消息,其中包含
原始消息的主题和原始预期收件人。
*``从"exception"获取"variable"--接受异常和变量名
作为参数,然后回溯stacktrace以查找具有指定名称的第一个
变量。
若要指定自定义错误处理程序,请在项目的
``setting s.py``设置字典中的
``secure\u mail\u failure\u handlers``中将键设置为ER的点路径错误处理程序:
…代码块::python
secure\u mail\u failure\u handlers={
'message':'myapp.handlers.handle\u failed\u encryption',
'alternative':'myapp.handlers.handle\u failed\u alternative\u encryption',
'attachment':'myapp.handlers.handle\u failed\u attachment\u encryption',
}
不必覆盖所有处理程序,您可以根据需要覆盖任意多个或任意少个处理程序。
或者创建自己的自定义后端:
…代码块::python
class encryptinglocmememailbackend(encryptingemailbackend,locmembackend):
pass
对于在另一个django应用程序中使用"encryptingemailbackendmixin"的实际工作示例,请查看"emailhub.backends.secure"mail.encryptingemailbackendmixin``来自
`django emailhub<;https://github.com/fixme/django emailhub>;``项目:
除了提供的``encryptingsmtpemailbackend``之外,此包还附带了几个后端,这些后端反映了内置的django后端:
*``encryptingconsoleemailbackend``
*``encryptinglocmememailbackend``
*``encryptingfilebasedemailbackend``
>数据库模型
----
`pgp解释<;https://en.wikipedia.org/wiki/pretty嫒good嫒u privacy>使用python gnupg,在secure-mail.models`-
``key``和``address``中定义了两个模型,它们分别表示pgp密钥和成功导入的密钥的电子邮件地址。这些模型的存在纯粹是为了通过django
管理导入
密钥并删除特定地址的密钥。
添加密钥时,密钥将导入服务器上的密钥环,并且不会保存"密钥"模型的实例。密钥的
电子邮件地址也会被提取并保存为一个
``address``实例。
`address``模型在发送电子邮件时用于检查
现有密钥以确定是否应加密电子邮件。
密钥已从服务器上的密钥环中删除。
可选的django应用程序
=====
>其他具有类似功能的django应用程序有:
*`django email extras<;https://github.com/stephenmcd/django email extras>;`-
提供两个功能用于使用django的模板系统发送pgp加密的多部分电子邮件的ons。还提供一个邮件后端,在开发期间在浏览器中显示html
邮件。
*`django gnupg mail s<;https://github.com/jandd/django gnupg mails>;`-
提供一个``gnupgmessage``(django的``emailmessage``的子类)来发送
pgp/mime签名的电子邮件。
bot其中h个应用程序要求第三方应用程序开发人员"选择加入"发送
加密邮件。此项目自动对所有应用程序的所有传出邮件进行加密和签名。