2009-08-11 424 views

回答

7

我假设你想加密日志的输出。在这种情况下,你需要编写你自己的Appender来处理加密。我会建议找出你打算在没有加密的情况下使用什么输出机制(即FileAppender,EventLogAppender等),然后扩展该Appender并覆盖实际写出输出的功能。

在追加程序的参考文档可以发现here

例如,与EncryptedFileAppender扩展FileAppender和覆盖/实现需要以挂接到文件写入成员。

或者,您可以从IAppender扩展并完全从头开始创建appender。这会给你更多的控制权,但如果你想要加密你的有效载荷,可能需要更多的工作。

+0

感谢您的精彩提示。所以,你的意思是,我最好先加密我的内容,然后再附加到我的日志中,然后执行一个包装工作。那么,我的logss的内容将全部加密,而无需在log4net中配置任何内容? – paradisonoir 2009-08-11 15:23:41

+0

您应该能够将其实际追加到日志文件的每个行项目的位置,从而允许您加密整个行。一旦你完成了,那么你需要配置log4net来使用你的Appender,而不是你之前使用的任何东西。在这种情况下,EncryptedFileAppender – Joseph 2009-08-11 15:37:29

+0

@Joseph,你是否建议为每行日志或当它翻转到不同的文件(因为它达到日志的最大大小)加密它? – paradisonoir 2009-08-11 17:13:03

2

如果您正试图防止用户阅读它在网上,你可以改变你在写日志记录的扩展,你不允许通过自己的网站提供服务的文件名。这样,用户就无法猜测您的日志文件并通过网络访问它。

如果你想防止用户查看该文件的内容登录到服务器本身,你可以使用权限控制锁定文件下来,只在特定的管理员组的用户可以查看其内容。

或者,您可以登录到数据库,以便有没有文件,需要在所有担保。

3

对加密没有直接的支持。正如其他人在此说明的那样,您必须自己实施。

这就是说,我会建议一个子类来ForwardingAppender做加密。这基本上会让你把你的appender“放在”你选择做的任何标准appender之前,以便真正写入磁盘。

1

我知道这个答案来自原来的发布日期了几年之后,却面临着同样的问题后,我决定创建一个开源包做只是这工作:log4net的消息加密器

的源代码在GitHub

中找到,该软件包可以从NuGet

+0

感谢分享,我正在寻找类似nlog的解决方案,现在至少我有一个参考实现要遵循。顺便说一下,我打算使用公钥/私钥来加密一个随机密钥,以进一步提高安全性,而不是修复对称密钥,因为任何有权访问该日志的人也可以从app.config获得密钥 – faulty 2015-07-23 06:44:04

+1

很高兴能帮助您! 对于我来说,主要的用例集中在日志存储在数据库中或关闭初始服务器。我的想法是,如果攻击者可以访问web.config文件,那么加密日志可能是徒劳的手势! 我甚至还在考虑将实现移植到NLog上,但是生活就这样陷入了困境。如果您确实设法创建了项目并将其开源,请告诉我,因为我会特别感兴趣! – 2015-07-23 09:27:52

+1

另外要提到的是web.config中的加密密钥部分应该使用Aspnet_regiis加密。这意味着密钥不是纯文本的,并且会更安全一些。 – 2015-07-23 09:47:39