在Haskell中使用HTTPS服务器

时间:2015-10-24 07:30:22

标签: windows haskell yesod

我试图在haskell中制作简单的https服务器,可能由于我的无知,我很难接受。

以下是我到达的可编辑的代码段。 (也许不行)

import Application () -- for YesodDispatch instance
import Foundation
import Yesod.Core

import Network.Wai.Handler.Warp
import Network.Wai.Handler.WarpTLS

main :: IO ()
main = do
  app <- toWaiApp App
  runTLS tSet defaultSettings app

tSet = tlsSettings "server.crt" "server.pem"

它只是stack new proj yesod-minimal项目的Main.hs的一部分,具有warp-tls依赖项。

但是建造的一切有问题,

  • 由于TLS错误,网页浏览器无法使用。
  • 在某些请求上CPU使用率很高(如无限循环)。

我想知道我哪里出错或出错了什么。以下是问题。

  1. 我该如何处理TLS错误。以下是卷曲错误日志。
  2. cmd>curl https://localhost:3000 --insecure -v
    * Rebuilt URL to: https://localhost:3000/
    *   Trying ::1...
    *   Trying 127.0.0.1...
    * Connected to localhost (127.0.0.1) port 3000 (#0)
    * ALPN, offering http/1.1
    * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
    * TLSv1.2 (OUT), TLS header, Certificate Status (22):
    * TLSv1.2 (OUT), TLS handshake, Client hello (1):
    * TLSv1.2 (IN), TLS handshake, Server hello (2):
    * TLSv1.2 (IN), TLS handshake, Certificate (11):
    * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
    * TLSv1.2 (OUT), TLS alert, Server hello (2):
    * error:04091077:rsa routines:INT_RSA_VERIFY:wrong signature length
    * Closing connection 0
    * TLSv1.2 (OUT), TLS alert, Client hello (1):
    curl: (35) error:04091077:rsa routines:INT_RSA_VERIFY:wrong signature length
    

    可执行日志

    24/Oct/2015:15:50:15 +0900 [Info#yesod-core] Application launched @(yesod_2EJXksqBDOz5UARIVdQquS:Yesod.Core.Dispatch .\Yesod\Core\Dispatch.hs:157:11)
    .exe: HandshakeFailed (Error_Misc "user error (unexpected type received. expecting handshake and got: Alert [(AlertLevel_Fatal,DecryptError)])")
    .exe: HandshakeFailed (Error_Protocol ("fallback is not allowed",True,InappropriateFallback))
    .exe: HandshakeFailed (Error_Misc "user error (unexpected type received. expecting handshake and got: Alert [(AlertLevel_Fatal,DecryptError)])")
    .exe: HandshakeFailed (Error_Protocol ("fallback is not allowed",True,InappropriateFallback))
    1. 如何从未知原因处理CPU高现象。 cpu usage images 在这种情况下,我不知道调试信息会有什么帮助。

    2. 当前的GHC 7.10.2可以解决由于windows&#39;而导致的编译时错误。命令行长度限制,我受此影响。我尝试设置STACK_ROOT并缩短项目路径,但是无法构建yesod-simple模板项目。 我可以尝试另一个工作或黑客攻击吗?我甚至尝试在git repo中手动构建ghc 7.11,但似乎堆栈不支持使用更新的GHC。

    3. 与上述代码中的主题toWaiApp功能略有不同,我相信函数的存在,但很难找到函数的名称。结果是,yesod维护堆栈文档而不是hackage。有没有像python模块文档那样方便的方法?

    4. 我不应该选择haskell吗?它远不是性能至关重要的东西,但是有什么关键的东西像Haskell的TLS实现的缺陷或缺乏构建工具对Windows的支持吗?

0 个答案:

没有答案