首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yesod支架browserId TlsException

Yesod支架browserId TlsException
EN

Stack Overflow用户
提问于 2015-04-11 21:31:31
回答 1查看 112关注 0票数 0

我想做什么

在Yesod中使用BrowserId创建和验证用户。

我试过的

我没有修改脚手架站点的身份验证代码。我在Foundation.hs中读到的以下内容表明,当他们使用browserId进行身份验证时,这将创建一个新用户。

代码语言:javascript
复制
getAuthId creds = runDB $ do
    x <- getBy $ UniqueUser $ credsIdent creds
    case x of
        Just (Entity uid _) -> return $ Just uid
        Nothing -> Just <$> insert User
            { userIdent = credsIdent creds
            , userPassword = Nothing
            }

但是,当我使用BrowserId/Persona进行身份验证时,我会得到一个包含以下错误消息的页面:

代码语言:javascript
复制
TlsException (HandshakeFailed (Error_Protocol ("certificate rejected: [SelfSigned]",True,CertificateUnknown)))

我找不到生成这个的文件。起初,我以为通过https为站点服务可能会解决这个问题,但我现在已经实现了https,但它没有实现,我使用的是一个签名的CA证书。

预期行为

对现有用户进行身份验证时,应该将它们签入。对以前未知的用户进行身份验证时,应该添加它们。

有人能说明我错过了什么吗?

编辑:tls-retreivecertificate输出

运行tls-retrievecertificate mydomain.com 443 --verify --chain显示,我的站点正在成功地返回其证书和签名授权机构的证书,但导致UnknownCA失败。

运行tls-retrievecertificate twitter.com 443 --verify --chain 还会显示证书和UnknownCA

因此,我认为这里的问题在于运行Yesod应用程序的机器或代理设置,而不是我如何在运行web服务器的机器上安装证书(这两者实际上都是Docker容器,所以我广泛地使用了' machine‘这个词)。我正在寻找一个解决方案,如果我找到它,我会发一个。与此同时,所有的人都感激地接受了帮助。我的Nginx设置如下:

代码语言:javascript
复制
# see http://serverfault.com/questions/577370/how-can-i-use-environment-variables-in-nginx-conf#comment730384_577370
upstream localhost {
    server api_1:3000;
}

server {
    listen 80;
    listen [::]:80;

    server_name example.com;

    return 301 https://$server_name$request_uri;
}
server {
    listen 443 default_server ssl;

    server_name example.com;

    ssl on;
    ssl_certificate /etc/nginx/ssl.cert;
    ssl_certificate_key /etc/nginx/ssl.dkey;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://localhost;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-12 20:53:37

结果发现这是码头工人的问题,而不是Yesod问题。运行该应用程序的Docker容器没有可信的证书,所以我只需重新构建它,ADD就可以从主机上修改这些证书。问题解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29583284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档