5/04/2020

How to fix "local error: tls: no renegotiation error" on golang net/http

에러의 내용을 요약하면 아래와 같습니다. renegoriation 미설정으로 인한 발생이네요...

local error: tls: no renegotiation 

dalfox 릴리즈 후 처음으로 이슈올라온 내용입니다. 다른 언어에서는 기본적으로 설정되어 있어서, 크게 신경쓰지 않았었는데, go의 경우 기본으로 포함되지 않기 때문에(샘플이나 튜토리얼등에서의 언급이..) 자주 실수할 수 있는 부분으로 보입니다.

What is SSL renegoriation?

기존 보안 세션 내에서 새 핸드쉐이크 협상을 시작하는 것을 재협상이라고 부릅니다. SSL 사용 중 클라이언트 인증이나, 암호화 관련 정보(알고리즘/키 등등)의 변경이 있는 경우 새로 세션을 맺어야하는데 이 때 renegoriation, 즉 재협상을 사용해야합니다. 그래서 기존의 SSL 세션을 이용해서 renegoriation message(암호화 키 + @ 정보) 를 전달하고 이를 기반으로 서버와 클라이언트가 새로 SSL 세션을 맺을 수 있습니다. 이 과정을 SSL renegoriation 이라고 부르고, 클라이언트/서버 모두 이 과정을 시작할 수 있기 때문에 보통 SSL Clinet들은 기본적으로 내장한 상태로 동작하는 경우가 많습니다.

Starting a new handshake negotiation within an existing security session is called SSL renegotiation. If there are changes to client authentication or encryption-related information (algorithm/key, etc.) during SSL use, a new session should be held, which is where re-negotiation, or renegotiation, should be used. This allows the server and client to have a new SSL session based on the existing SSL session, which is passed on to the regeneration message (encryption key + @ information). Because this process is called SSL regeneration, and both clients/servers can start this process, SSL Clinets usually operate in a built-in state by default.

How to fix?

문제점부터 짚어보면, golang에선 기본적으로 내장된 코드도 아니고, 예시코드에도 나와있지 않아서 충분히 개발자가 실수할 수 있는 부분입니다. 단순하게 http client가 SSL renegoriation을 지원해줄 수 있도록 tls config에서 설정 후 사용해주면 됩니다.

If you look at the problem first, it's not a built-in code in Golang, and it's not listed in example code, so the developer can make a mistake. Simply set it up in tls.config and use it so that the http.client can support SSL regeneration.

tr := &http.Transport{
        TLSClientConfig: &tls.Config{
            Renegotiation:      tls.RenegotiateOnceAsClient,
            InsecureSkipVerify: true},
    }

client := &http.Client{
        Timeout:   timeout,
        Transport: tr,
    }

저의 경우에도 비슷한 형태로 해결했습니다.
I'm the same


https://github.com/hahwul/dalfox/issues/61

Reference

https://stackoverflow.com/questions/57420833/tls-no-renegotiation-error-on-http-request
https://devcentral.f5.com/s/articles/ssl-profiles-part-6-ssl-renegotiation


HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

1 comment:

  1. thank you ;D
    actually, it's just a memo, so there's nothing much to it. LOL

    ReplyDelete