Golang HTTPS与OpenSSL的ECDSA证书

时间:2017-08-04 13:43:39

标签: ssl go openssl ecdsa

我不知道这是否是正确的地方,但我会尝试。

我正在尝试使用从OpenSSL生成的ECDSA证书运行elliptic.P256()

失败并显示以下错误消息:See FIPS 186-3, section D.2.3

理解secp256r1,在代码中有prime256v1

在此链接中:http://www.ietf.org/rfc/rfc5480.txt,它说它也称为$ openssl ecparam -name secp256r1 -text -noout using curve name prime256v1 instead of secp256r1 ASN1 OID: prime256v1 NIST CURVE: P-256

如下所示,OpenSSL将其视为generate_cert.go

$ openssl ecparam -text -noout -in key.pem 
unable to load elliptic curve parameters
140377431725720:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:701:Expecting: EC PARAMETERS

那有什么不对? 如何从OpenSSL生成ECDSA证书并在我的Go代码中使用它?

使用<tab ng-if="dataConsNetfilter" heading="Summary" disable="!tabClick" active="true"> <p>{{dataConsNetfilter}}</p> <div class="no-data" ng-if="dataConsNetfilter.types[0].data.length==0"> <img src="/assets/img/nodata.png"/> <h3>No Data</h3> </div> <div class="col-md-12" style="text-align:center;margin-bottom:30px" ng-repeat="graph in dataConsNetfilter.types" resize> <img ng-if="!graph.options" style="height:32px;margin:50px auto;" src="/assets/img/loader.gif" /> <div ng-if="graph.options && graph.data.length>0"> <center><nvd3 options='graph.options' data="graph.data"></nvd3></center> <br> </div> </div> </tab> 生成P256 ECDSA证书,我的代码有效,但如果我尝试使用OpenSSL读取密钥文件,它也会失败。

 Public Sub New(customerID As Integer, fullName As String, phoneNumber As String, emailID As String)

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    _customerID = customerID
    _fullName = fullName
    _phoneNumber = phoneNumber
    _emailID = emailID
End Sub

3 个答案:

答案 0 :(得分:0)

我无法弄清楚OpenSSL和Go之间存在什么问题。

但我的主要问题是,如何生成与Go代码一起使用的ECDSA证书!

使用CFSSLhttps://cfssl.org/)我可以生成ECDSA证书,并使用从OpenSSL生成的内部CA证书对其进行签名。从CFSSL生成的证书可以正常使用我的Go代码,所以对我来说它解决了我的主要问题!

我不知道OpenSSL和Go之间是否存在格式问题,但由于CFSSL是用Go编写的,因此在我的代码和浏览器中生成的证书运行良好。

答案 1 :(得分:0)

以下是OpenSSL生成的与Go一起使用的ECDSA密钥的示例。

https://play.golang.org/p/MS_FQ8cqqA8

正如本问题中所阐明的那样 - https://github.com/golang/go/issues/23591,go无法识别在Openssl中使用-param_enc explicit标志生成的EC密钥。

# openssl ecparam -name prime256v1 -genkey -noout -out priv2.pem

# openssl req -new -x509 -key priv2.pem -out EC_server2.pem -days 365

希望这能解决你的问题。

答案 2 :(得分:0)

运行:

go run `go env GOROOT`/src/crypto/tls/generate_cert.go --host=localhost --ecdsa-curve=P256

这将在当前目录中生成cert.pemkey.pem