我不知道这是否是正确的地方,但我会尝试。
我正在尝试使用从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
答案 0 :(得分:0)
我无法弄清楚OpenSSL和Go之间存在什么问题。
但我的主要问题是,如何生成与Go代码一起使用的ECDSA证书!
使用CFSSL
(https://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.pem
和key.pem
。