[openssl-users] Openssl 1.0.2o issue with FIPS mode set.
Ajay Nalawade
ajay.nalawade at gmail.com
Fri Jul 6 12:25:02 UTC 2018
Issue is not seen for Openssl version 1.0.2g. Issue is present for all
versions post 1.0.2g.
Thanks,
Ajay
On Fri, Jul 6, 2018 at 11:33 AM Ajay Nalawade <ajay.nalawade at gmail.com>
wrote:
> Here are some more observations.
> 1. It did not take much load to cause this error(Creating even 2
> connections in parallel gives this issue).
> 2. While a client is sending data, another client connecting does not
> error. The error seems to be only when two clients try to handshake
> together. If we serialise ssl wrap even thousands of clients do not give
> this issue.
> 3. There comes a time(after 40 iterations in case of 3 parallel
> handshaking clients) after which the server kind of gives up and keeps on
> giving the same error no matter how much we slow down the clients(I stopped
> my client script for 5 minutes before trying again).
>
> On Thu, Jul 5, 2018 at 6:29 PM Ajay Nalawade <ajay.nalawade at gmail.com>
> wrote:
>
>> package main
>>
>> import (
>> "log"
>> "net"
>> "net/http"
>> "fmt"
>> "os"
>> "bufio"
>> "io"
>> "strconv"
>> "github.com/spacemonkeygo/openssl"
>> )
>>
>> func init_fips() {
>> err := openssl.FIPSModeSet(true)
>> if err != nil {
>> panic(fmt.Errorf("%v Error:%v\n", "openssl failed to set
>> fips mode.", err))
>> }
>> log.Print("OpenSSL FIPS mode is set to: True\n")
>> }
>>
>> func main() {
>> init_fips()
>>
>> laddr := "0.0.0.0:443"
>> var ln net.Listener
>> var err error
>>
>> // Init SSL shared context used across connections
>> ctx, err := openssl.NewCtxFromFiles("/etc/certs/sslcert.crt",
>> "/etc/certs/sslcert.key")
>> if err != nil {
>> log.Fatalf("Failed to read ssl certificate. Error: %v", err)
>> }
>>
>> // Set options and do not allow SSLv2 and SSLv3 communication
>> _ = ctx.SetOptions(openssl.CipherServerPreference |
>> openssl.NoSSLv2 | openssl.NoSSLv3)
>>
>> // Read certificate
>> // Listen on bind address
>> ln, err = openssl.Listen("tcp", laddr, ctx)
>>
>> if err != nil {
>> log.Fatalf("Failed to start server. Error: %v",
>> err)
>> os.Exit(1)
>> } else {
>> log.Println("Started secure server")
>> }
>> if err != nil {
>> log.Fatalf("server: listen: %s", err)
>> }
>> log.Print("server: listening")
>> for {
>> accepted, err := ln.Accept()
>>
>> if err != nil {
>> log.Println("Got errored while accepting connection. %v", err)
>> return
>> }
>>
>> go handleClient(accepted)
>> }
>> }
>>
>> func handleClient(conn net.Conn) {
>> defer conn.Close()
>> reader := bufio.NewReader(conn)
>> for {
>> //log.Print("server: conn: waiting")
>> var err error
>> httpreq, err := http.ReadRequest(reader)
>> if err != nil {
>> log.Print("Errored while reading request. Error: %v", err)
>> break
>> }
>> buf := make([]byte, httpreq.ContentLength)
>> toread := int(httpreq.ContentLength)
>> rbytes := 0
>> n := 0
>> for toread > 0 {
>> n, err = httpreq.Body.Read(buf[rbytes:])
>> if err != nil && err != io.EOF {
>> log.Print("Errored while reading request body.
>> Error: %v", err)
>> break
>> }
>> rbytes += n
>> toread = toread - n
>> }
>>
>> resp := append([]byte("HTTP/1.1 200 OK\r\n"+"Content-Length: "+
>> strconv.Itoa(len(buf))+"\r\n\r\n"), buf...)
>> _, err = conn.Write(resp)
>> if err != nil {
>> log.Print("Errored while writing response. Error: %v",
>> err)
>> break
>> }
>>
>> log.Printf("server: conn: wrote %d bytes", n)
>>
>> }
>> log.Println("server: conn: closed")
>> }
>>
>> On Thu, Jul 5, 2018 at 6:25 PM Ajay Nalawade <ajay.nalawade at gmail.com>
>> wrote:
>>
>>> I am able to reproduce this issue with attached go lang based server. Am
>>> I doing anything wrong here.
>>> Is there any known issue, or any workaround available for this issue.
>>>
>>> Thanks,
>>> Ajay
>>>
>>> On Thu, Jun 7, 2018 at 12:33 PM Ajay Nalawade <ajay.nalawade at gmail.com>
>>> wrote:
>>>
>>>> Hello,
>>>>
>>>> I have golang based openssl server with FIPS mode set. I am using
>>>> Openssl library build with fips module 2.0.
>>>> With Openssl 1.0.1u version, everything was running fine.
>>>> Recently I upgraded to version 1.0.2o. With this version, under high
>>>> traffic condition (more than 4k requests per minute), read request fails
>>>> with following error.
>>>> "SSL errors: SSL routines:SSL3_GET_RECORD:decryption failed or bad
>>>> record mac"
>>>>
>>>> If I disable FIPS mode, every thing runs fine. Is there any known issue
>>>> with version 1.0.2o with FIPS mode set.
>>>>
>>>> Thanks a lot in advance,
>>>> Ajay
>>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mta.openssl.org/pipermail/openssl-users/attachments/20180706/dd6e59fa/attachment.html>
More information about the openssl-users
mailing list