小编Jam*_*ell的帖子

SSL错误:无法获取本地颁发者证书

我在Debian 6.0 32位服务器上配置SSL时遇到问题.我对SSL比较新,所以请耐心等待.我尽可能多地提供信息.
注意:已更改真实域名以保护服务器的标识和完整性.

组态

服务器正在使用nginx运行.它配置如下:

ssl_certificate           /usr/local/nginx/priv/mysite.ca.chained.crt;
ssl_certificate_key       /usr/local/nginx/priv/mysite.ca.key;
ssl_protocols             SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers               HIGH:!aNULL:!MD5;
ssl_verify_depth          2;
Run Code Online (Sandbox Code Playgroud)

我使用此处描述的方法链接了我的证书

cat mysite.ca.crt bundle.crt > mysite.ca.chained.crt
Run Code Online (Sandbox Code Playgroud)

mysite.ca.crt签名机构给我的证书在哪里,我的签字机构bundle.crt也发给我的是CA证书.问题是我没有直接从GlobalSign购买SSL证书,而是通过我的托管服务提供商Singlehop购买.

测试

证书在Safari和Chrome上正确验证,但在Firefox上验证不正确.初步搜索显示它可能是CA的问题.

我探讨了类似问题的答案,但无法找到解决方案,因为我真的不明白每个证书的用途.

我使用openssl的s_client来测试连接,并收到输出,这似乎表明与类似问题相同的问题.错误如下:

depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=27:certificate not trusted
verify return:1
Run Code Online (Sandbox Code Playgroud)

可以在此处找到openssl响应的完整详细信息(证书和不必要的信息被截断).

我也看到了警告:

No client certificate CA names sent
Run Code Online (Sandbox Code Playgroud)

这可能是问题所在吗?如何确保nginx发送这些CA名称?

试图解决问题

我试图通过直接从GlobalSign下载根CA来解决问题,但收到了同样的错误.我使用update-ca-certificates命令在我的Debian服务器上更新了根CA ,但没有任何改变.这可能是因为从我的提供商发送的CA是正确的,因此它导致证书被链接两次,这没有帮助.

0 s:/OU=Domain …
Run Code Online (Sandbox Code Playgroud)

security ssl https openssl ssl-certificate

78
推荐指数
1
解决办法
27万
查看次数

获取Model Serializer中的当前用户

是否可以在模型序列化器中获取当前用户?我想这样做,而不必分离泛型,因为这是一个必须完成的简单任务.

我的模特:

class Activity(models.Model):
    number = models.PositiveIntegerField(
        blank=True, null=True, help_text="Activity number. For record keeping only.")
    instructions = models.TextField()
    difficulty = models.ForeignKey(Difficulty)
    categories = models.ManyToManyField(Category)
    boosters = models.ManyToManyField(Booster)

    class Meta():
        verbose_name_plural = "Activities"
Run Code Online (Sandbox Code Playgroud)

我的序列化器:

class ActivitySerializer(serializers.ModelSerializer):

    class Meta:
        model = Activity
Run Code Online (Sandbox Code Playgroud)

我的观点是:

class ActivityDetail(generics.RetrieveUpdateDestroyAPIView):

    queryset = Activity.objects.all()
    serializer_class = ActivityDetailSerializer
Run Code Online (Sandbox Code Playgroud)

如何返回模型,并附加一个字段user,以便我的响应如下所示:

{
    "id": 1, 
    "difficulty": 1, 
    "categories": [
        1
    ], 
    "boosters": [
        1
    ],
    "current_user": 1 //Current authenticated user here
}
Run Code Online (Sandbox Code Playgroud)

python django serialization django-rest-framework

33
推荐指数
2
解决办法
2万
查看次数

Certbot没有创建acme-challenge文件夹

几个月前我曾经工作过Let's加密证书(使用旧的letsencrypt客户端).我使用的服务器是nginx.

Certbot正在创建.well-known文件夹,但不是acme-challenge文件夹

现在我尝试通过创建新证书 ~/certbot-auto certonly --webroot -w /var/www/webroot -d domain.com -d www.domain.com -d git.domain.com

但我总是得到这样的错误:

IMPORTANT NOTES:
   - The following errors were reported by the server:

   Domain: git.domain.com
   Type:   unauthorized
   Detail: Invalid response from
   http://git.domain.com/.well-known/acme-challenge/ZLsZwCsBU5LQn6mnzDBaD6MHHlhV3FP7ozenxaw4fow:
   "<.!DOCTYPE html>
   <.html lang='en'>
   <.head prefix='og: http://ogp.me/ns#'>
   <.meta charset='utf-8'>
   <.meta content='IE=edge' http-equiv"

   Domain: www.domain.com
   Type:   unauthorized
   Detail: Invalid response from
   http://www.domain.com/.well-known/acme-challenge/7vHwDXstyiY0wgECcR5zuS2jE57m8I3utszEkwj_mWw:
   "<.html>
   <.head><.title>404 Not Found</title></head>
   <.body bgcolor="white">
   <.center><.h1>404 Not Found</h1></center>
Run Code Online (Sandbox Code Playgroud)

(当然HTML标签内的点不是真的存在)

我找了一个解决方案,但还没找到.有谁知道为什么certbot没有创建文件夹?

提前致谢!

https nginx lets-encrypt certbot

20
推荐指数
2
解决办法
1万
查看次数

为Django频道加载尖峰保护

是否有任何具体可以帮助使Django Channels服务器不易受到轻微或意外的 DDoS攻击或来自websocket/HTTP客户端的一般负载增加的影响?由于频道不是真正的异步(仍然是幕后工作人员),我觉得要取消基于频道的网站是很容易的 - 即使使用相当简单的硬件.我目前正在Django频道上构建一个应用程序,稍后会运行一些测试来看看它是如何保持的.

达芙妮是否有某种形式的节流?我应该实现一些应用程序级别的限制吗?由于工作人员仍然处理受限制的请求,但这仍然很慢,但请求可以更快.我还能做些什么来试图阻止这些攻击吗?

我有一个想法是始终确保为特定通道指定工作人员 - 这样,如果websocket通道过载,HTTP仍将响应.

编辑:我很清楚低级DDoS保护是一个理想的解决方案,我理解DDoS攻击是如何工作的.我正在寻找的是一个内置于通道的解决方案,可以帮助处理增加的负载.也许Daphne能够扩展一个频道并缩小另一个频道以进行补偿,或者一种限制方法可以减少某个点之后每个请求的权重.

我正在寻找一个达芙妮/渠道特定的答案 - 关于DDoS或一般负载处理的一般答案不是我正在寻找的 - 关于这一点还有很多其他问题.

我还可以根据谁登录以及谁不登录来控制限制 - 未登录用户的限制可以提供帮助.

再次编辑:请阅读整个问题!我不是在寻找一般的DDoS缓解建议或低级方法的解释.我想知道达芙妮是否支持以下内容:

  • 节流
  • 基于队列大小的动态工作者分配
  • 中间件为经过身份验证的请求提供优先级

或者那种性质的东西.我也将直接与Channels社区联系,因为这可能不是这个问题的最佳位置.

python django websocket django-channels

19
推荐指数
1
解决办法
960
查看次数

JasperException - 即使存在标记,也找不到文件

好吧StackOverflow,我是在需要的时候来找你的.

我继承了一个带有自定义标记库的项目.该项目位于AEM中,但问题更多的是Java方面的问题,而且对于我所知道的AEM来说并不是特定的.AEM建立在OSGI之上,因此可能是相关的,但同样不太可能成为答案的一部分.

基本上,我只在两台服务器中的一台上获得例外.它说:

org.apache.sling.api.scripting.ScriptEvaluationException:org.apache.sling.scripting.jsp.jasper.JasperException:找不到文件"/META-INF/tags/helloWorld.tagx"

现在 - 这helloWorld.tagx是一个模板项目留下的垃圾,但由于某种原因,它是必不可少的.这里有一些问题.

  1. 标签在正确的位置(META-INF/tags/helloWorld.tagx)和我使用的jsptld-maven-plugin生成tld看起来正确的给我的文件.

插件的配置(以及maven-bundle-plugin):

        <plugin>
            <groupId>com.squeakysand.jsp</groupId>
            <artifactId>jsptld-maven-plugin</artifactId>
            <configuration>
                <shortName>myproject</shortName>
                <processTagFiles>true</processTagFiles>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-Activator>com.rebny.taglib.osgi.Activator</Bundle-Activator>
                    <Include-Resource>
                        META-INF/${project.artifactId}-${project.version}.tld=${project.build.outputDirectory}/META-INF/${project.artifactId}-${project.version}.tld,
                        {maven-resources}
                    </Include-Resource>
                    <Sling-Bundle-Resources>
                        /META-INF/tags
                    </Sling-Bundle-Resources>
                </instructions>
            </configuration>
        </plugin> 
Run Code Online (Sandbox Code Playgroud)

以及生成的tld文件中的段:

<tag-file>
    <name>helloWorld</name>
    <path>/META-INF/tags/helloWorld.tagx</path>
</tag-file>
Run Code Online (Sandbox Code Playgroud)

所以它看起来很好,我已经做了很多搜索,发现有语法错误的人,等等,但我不相信这种情况,特别是因为它适用于一台服务器.

  1. 奇怪的部分是标签实际上并未在任何地方使用,但删除它并不能解决问题.抛出此错误的jsp使用其他标记,但不使用此标记.在整个项目中几乎没有引用此标记 - 我认为它可能隐藏了另一个问题.该错误表明它位于JSP的第6行,但源JSP或编译的JSP在第6行或文件中都没有任何有趣的内容.同样,即使编译的JSP也没有引用此标记!

我很乐意提供其他信息.我对此的了解非常差,所以我不确定哪些信息是相关的.任何帮助或疑难解答提示非常感谢!

这里有完整的堆栈跟踪

java jsp osgi maven

11
推荐指数
1
解决办法
413
查看次数

从令牌创建Django会话

问题

我目前正在努力解决从Django提供身份验证强制媒体文件的众所周知的问题.问题的背景很简单:

  • 我们想要使用Django的媒体文件支持
  • 默认情况下,媒体文件不是私有的.事实上,通常网络服务器直接为他们服务.
  • 我们希望在访问媒体文件时对用户进行身份验证
  • 我们在前端使用令牌认证
  • 由于没有有效的会话,浏览器在访问私有文件时无法进行身份验证(例如在新选项卡中打开PDF)
  • 我们希望Django为浏览器提供身份验证,但需要以某种方式使用现有的身份验证令牌进行身份验证
  • 我们仍然希望nginx将文件发回,因此我们将利用X-Accel-Redirect后验证.

试图解决

到目前为止我所做的(并且它可以工作)是创建另一个需要令牌认证的API视图并将文件发回,然后创建一个Angular指令以用blob替换所有受保护的URL.当用户单击链接时,它使用令牌身份验证获取文件,然后创建包含该数据的Blob.然后浏览器打开该blob.

遗憾的是,无法共享blob,因此用户无法为这些文件粘贴彼此的链接.我想知道是否有办法绕过它.

目标

我的目标是使用令牌创建有效(和短期到期)会话.这样,当用户单击链接时,发送请求以检查是否存在有效会话,然后以某种方式配置浏览器以使其可以使用该会话.整个过程看起来像这样:

  • 用户点击链接(实际上是一个更复杂的角度指令)
  • Angular fires请求与服务器的会话
  • 服务器响应必要的信息
  • 使用JavaScript配置浏览器会话
  • 强制浏览器打开新建立的会话链接
  • 根据会话验证用户,使用header将文件发送到nginx

我不是在寻找一个已经实现的答案,我可以自己处理好的细节.我更感兴趣的是获得有关如何以最佳方式完成此操作的反馈.即:

  • 如何在API响应中给出一些会话信息来配置浏览器?
  • 我应该如何处理这些会话到期以使其安全
  • 我该如何建立这个会话?每次点击链接时检查/创建会话是否合理(假设流量不是问题)
  • 这是一个合理的跨浏览器解决方案吗?有更好的方法吗?
  • 当文件URL与没有会话但具有有效令牌的用户共享时,如何使用中间页面来建立此会话?

一些选项

更新:我和一些提出以下选择的同事交谈过:

  • 让API检索单个使用或短期到期令牌而不是会话,并将其作为查询参数附加到文件的URL.在请求中验证这一点.这有效,但仍然不允许共享URL.
  • 登录时建立会话.如果用户尝试访问文件时该会话已过期,则重定向到会话登录,然后在进行身份验证时重定向回文件.这也有效,但我想避免额外的身份验证步骤,因为令牌有很长的到期时间,会话有一个很短的时间.赋予它们相同的到期也会有缺点,因为更频繁到期的令牌或经常过期的会话并不理想.

django session nginx angularjs django-rest-framework

10
推荐指数
1
解决办法
1224
查看次数

将多个.CSV文件发送到.ZIP而不用Python存储到磁盘

我正在为我的Django网站上的报告应用程序工作.我想运行多个报告,并让每个报告在内存中生成一个.csv文件,可以批量下载为.zip.我想这样做而不将任何文件存储到磁盘.到目前为止,为了生成单个.csv文件,我遵循常见的操作:

mem_file = StringIO.StringIO()
writer = csv.writer(mem_file)
writer.writerow(["My content", my_value])
mem_file.seek(0)
response = HttpResponse(mem_file, content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=my_file.csv'
Run Code Online (Sandbox Code Playgroud)

这很好,但只适用于单个解压缩的.csv.例如,如果我有一个使用StringIO流创建的.csv文件列表:

firstFile = StringIO.StringIO()
# write some data to the file

secondFile = StringIO.StringIO()
# write some data to the file

thirdFile = StringIO.StringIO()
# write some data to the file

myFiles = [firstFile, secondFile, thirdFile]
Run Code Online (Sandbox Code Playgroud)

我怎么能返回包含所有对象的压缩文件,myFiles并且可以正确解压缩以显示三个.csv文件?

python csv django zipfile

8
推荐指数
1
解决办法
3610
查看次数

使用Web API和JSON补丁文档进行模型验证

我正在使用ASP.NET 4.5和Web Api的JsonPatchDocument.我的控制器看起来像这样:

[HttpPatch]
[Route("MyRoute/{PersonItem1}/{PersonItem2}/")]
public IHttpActionResult ChangePerson([FromHeader]Headers, [FromBody]JsonPatchDocument<PersonDto> person)
{
    // Do some stuff with "person"
}
Run Code Online (Sandbox Code Playgroud)

而且PersonDto:

public class PersonDto
{
    public string Name { get; set; }
    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以发送一个类似于的PATCH请求:

{
    "op": "op": "replace", "path": "/email", "value": "new.email@example.org"
}
Run Code Online (Sandbox Code Playgroud)

现在让我说我添加一些数据注释:

public class PersonDto
{
    public string Name { get; set; }

    [MaxLength(30)]
    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在不编写其他验证的情况下,确保此验证的最佳方法是什么.它甚至可能吗?

asp.net asp.net-web-api

8
推荐指数
1
解决办法
1270
查看次数

JavaScript奇怪的数组定义语法

我和一些同事遇到了一些更奇怪的JavaScript语法.我们无法解释以下行为(我使用的是Chrome控制台):

> {}[1]
Run Code Online (Sandbox Code Playgroud)

产量

[1]
Run Code Online (Sandbox Code Playgroud)

从本质上讲,在数组之前包含任何对象(不仅仅是空)是有效的语法,结果始终只是数组.这有什么解释吗?这种情况不是这样的吗?

此外,这个问题有点难以搜索,因为它包含的搜索引擎效果不佳.如果这是一个重复的问题,请告诉我.

javascript syntax

8
推荐指数
1
解决办法
135
查看次数

uWSGI - Django Admin的不同Harakiri超时

对于Django管理页面,是否可以将uWSGI的harakiri超时设置为不同?

我有一个网站需要上传大文件,这可能需要超过20或30秒,但我希望全球harakiri超时更像15秒,因为我将数据发送回用户.

这是否由uWSGI支持?有没有什么方法可以在我的Django项目中对此进行调整?

python django uwsgi

7
推荐指数
1
解决办法
1686
查看次数