(Disclaimer: not a FIPS compliance expert, you should hire your own experts
to get authoritative answers)

FIPS 140-2 seems to reference FIPS 186-4 for specific algorithm choices.
FIPS 186-4 specifies that the RSA modulus shall be 1024, 2048, or 3072
bits. So, as-written, it seems like 4096-bit RSA keys are not allowed under
FIPS 140-2, which would explain why BoringCrypto doesn't permit them.

There seems to be a bunch of discussion in standards bodies saying that
this was a bit of a mistake in FIPS 186-4, but the great thing about
regulations is you don't fix them just by saying "oh, that's obviously
incorrect, let's just ignore it" :(

Seems like you need to talk to Azure about FIPS 140-2 compliant access
methods, or to your own compliance staff about how you can navigate the
regulatory requirements and still connect to stuff.

- Dave

On Thu, Apr 30, 2020 at 11:13 AM <mohit.bits2...@gmail.com> wrote:

> Summary - Trying Boring Go in FIPS mode to connect to Microsoft services
> (Azure). Intermediate CA Certificate for Microsoft has a 4096 bit public
> key that is not allowed by Boring Go (Code here
> <https://github.com/golang/go/blob/2b0d842f4b24b3be4bcf02c7a796e3a4d3d952f6/src/crypto/tls/boring.go#L98>
> ), Is there any workaround without having to turn off FIPS mode ?
>
> go version go1.14b4 linux/amd64
>
> Hi all,
> So I am working on an application that requires to be run in FIPS mode and
> has to connect to Azure services. I looked up the boring Go branch, got
> version 1.14 and started using it.
> While trying to connect to Azure services (for eg.
> graph[dot]microsoft[dot]com or even microsoft[dot]com), I was getting an
> incompatible certificate usage issue. Here is the sample code I am using -
> `package main
>
> import (
>         "fmt"
>         "io/ioutil"
>         "net/http"
>         _ "crypto/tls/fipsonly" //Code works without this but we need the 
> application to run in FIPS
> )
> func main() {
>         url := "https: //microsoft.com" //Space put here because of two link 
> limit
>         fmt.Printf("HTML code of %s ...\n", url)
>         client := &http.Client{}
>         resp, err := client.Get(url)
>
>         if err != nil {
>                 panic(err)
>         }
>
>         defer resp.Body.Close()
>
>         html, err := ioutil.ReadAll(resp.Body)
>         if err != nil {
>                 panic(err)
>         }
>
>         fmt.Printf("%s\n", html)
> }`
>
> The error I get is as follows -
> HTML code of https: //microsoft.com ... panic: Get "https: //microsoft.com":
> x509: certificate specifies an incompatible key usage goroutine 1
> [running]: main.main() /usr/local/go/bin/test.go:15 +0x26c exit status 2
>
> I checked the golang code and found that a certificate with a 4096 bit
> public key is not a valid certificate according to the IsBoringCertificate
> function The intermediate certificate in Microsoft’s Certificate Chain has
> a 4096 bit public key.
> [image: Screen Shot 2020-04-27 at 12.35.20 PM]
> <https://forum.golangbridge.org/uploads/default/original/2X/5/5ee810d6e3d7c0397d6414aed64851342df3f843.png>
>
> So, my question is as follows :
>
>    1. Is this intended behavior ?
>    2. If yes, is here any workaround via which I can keep FIPS mode on
>    and connect to these services ? This workaround can be code changes or
>    using different tools. However, I can’t turn off FIPS mode.
>
> Thanks for going through this !
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/619f65bc-e79a-4412-8913-a03992fae04a%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/619f65bc-e79a-4412-8913-a03992fae04a%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAMx%2Br7WOU4-%2BVweYrep2dcCkhirgV9JiV3ct42k70fBtL73wcw%40mail.gmail.com.

Reply via email to