不确定以编程方式生成的自签名ECDSA证书是否符合WebRTC的使用要求,以及指纹计算是否正确

不确定以编程方式生成的自签名ECDSA证书是否符合WebRTC的使用要求,以及指纹计算是否正确,webrtc,x509certificate,client-certificates,self-signed,dtls,Webrtc,X509certificate,Client Certificates,Self Signed,Dtls,应该清楚的是,我是证书和密码的新手 我试图以编程方式生成自签名证书,以便在SFU的实现中与WebRTC一起使用。关于用于WebRTC的证书主题,声明: 用户代理必须支持以下值:{name: “RSASSA-PKCS1-v1_5”,模块长度:2048,公共指数:新 Uint8Array([1,0,1])、散列:“SHA-256”}和{name:“ECDSA”, 命名曲线:“P-256”} 在C中以编程方式创建ECDSA证书并保存后,我对创建的证书文件运行以下命令: openssl x509 -

应该清楚的是,我是证书和密码的新手

我试图以编程方式生成自签名证书,以便在SFU的实现中与WebRTC一起使用。关于用于WebRTC的证书主题,声明:

用户代理必须支持以下值:{name: “RSASSA-PKCS1-v1_5”,模块长度:2048,公共指数:新 Uint8Array([1,0,1])、散列:“SHA-256”}和{name:“ECDSA”, 命名曲线:“P-256”}

在C中以编程方式创建ECDSA证书并保存后,我对创建的证书文件运行以下命令:

  openssl x509 -in /tmp/ecdsa_certificate -text  #Linux command-line
我得到输出:

  Certificate:
      Data:
          Version: 1 (0x0)
          Serial Number: 1 (0x1)
          Signature Algorithm: ecdsa-with-SHA256
          Issuer: C = IN, O = XYZ Tech., CN = localhost
          Validity
              Not Before: Jun 23 17:28:14 2020 GMT
              Not After : Jun 23 17:28:14 2021 GMT
          Subject: C = IN, O = XYZ Tech., CN = localhost
          Subject Public Key Info:
              Public Key Algorithm: id-ecPublicKey
                  Public-Key: (256 bit)
                  pub:
                      04:d9:c8:cc:93:13:54:3d:e6:40:d7:2f:33:da:f2:
                      d4:e4:62:83:a4:ec:ad:98:f5:d5:2e:cf:3b:e8:5f:
                      ad:da:b9:e0:59:f0:19:59:84:b8:47:45:b4:21:56:
                      30:c8:1d:0b:9b:2d:02:e2:f5:4d:c7:57:2e:e6:a6:
                      f9:c4:c4:a7:5c
                  ASN1 OID: secp256k1
      Signature Algorithm: ecdsa-with-SHA256
           30:44:02:20:58:0a:49:7d:e3:0f:d7:56:6a:5c:af:f8:bd:1d:
           5e:54:bb:15:10:ec:05:3a:3a:db:79:8f:e6:70:86:6d:3d:f1:
           02:20:4f:89:5f:df:21:46:1b:da:6b:40:04:98:2c:df:35:ff:
           e5:3d:52:d5:07:76:bf:23:a4:01:b7:28:bf:f5:83:30
  -----BEGIN CERTIFICATE-----
  MIIBTTCB9QIBATAKBggqhkjOPQQDAjA1MQswCQYDVQQGEwJJTjESMBAGA1UECgwJ
  WFlaIFRlY2guMRIwEAYDVQQDDAlsb2NhbGhvc3QwHhcNMjAwNjIzMTcyODE0WhcN
  MjEwNjIzMTcyODE0WjA1MQswCQYDVQQGEwJJTjESMBAGA1UECgwJWFlaIFRlY2gu
  MRIwEAYDVQQDDAlsb2NhbGhvc3QwVjAQBgcqhkjOPQIBBgUrgQQACgNCAATZyMyT
  E1Q95kDXLzPa8tTkYoOk7K2Y9dUuzzvoX63aueBZ8BlZhLhHRbQhVjDIHQubLQLi
  9U3HVy7mpvnExKdcMAoGCCqGSM49BAMCA0cAMEQCIFgKSX3jD9dWalyv+L0dXlS7
  FRDsBTo623mP5nCGbT3xAiBPiV/fIUYb2mtABJgs3zX/5T1S1Qd2vyOkAbcov/WD
  MA==
  -----END CERTIFICATE-----
此证书是否符合WebRTC对DTLS握手的要求。似乎只有公钥和证书指纹才对WebRTC的使用起作用

问题2: 我尝试使用以下函数计算证书上的指纹:

   if (X509_digest(certificate, EVP_sha256(), rfingerprint, &fingerprintSize) !=0 )
      printf("Error in X509_digest\n");
   printf("finger print size is %d\n", fingerprintSize);

它显示的指纹大小只有7!在大多数SDP中,我看到指纹属性要长得多。有什么意见吗?

在研究π介子的时候,我和你在同一条船上(asinix:)这是我在测试WebRTC东西时在本地生成的

  openssl ecparam -out key.pem -name prime256v1 -genkey
  openssl req -new -sha256 -key key.pem -out server.csr
  openssl x509 -req -sha256 -days 365 -in server.csr -signkey key.pem -out cert.pem
如果你陷入困境,你也可以做RSA!也许只是为了解除对构建MVP的阻碍:)

该实现现在是纯Go,但是您可以看到我们使用CGO的第一个版本


我不知道你的东西在哪里不同,但请随意复制/比较(无需归属)

(1)您的链接指向4.9.2而不是4.9(2)WebRTC中指定的曲线p-256(在FIPS186中定义)在X9中也称为prime256v1,在SECG中称为secp256r1。您的证书使用曲线secp256k1,这是一条不同的曲线;不同曲线上的关键点不可互换。(3) 是SHA256指纹/摘要应为32字节(相当于64个十六进制数字)。但是,
X509_digest()
返回1表示成功,因此
!=0
案例不应该是一个错误。@dave_thompson_085您的评论是正确的,帮助我解决了所有相关问题。@dave_thompson_085如果您能看一下,将不胜感激,谢谢。尽管多次通过RFC,DTLS-SRTP对我来说是一个未经授权的领域,但对一个新手来说却是令人兴奋的东西。是的,这些都是几乎没有文档记录的,有时感觉有目的性。我正在编写一本免费/开源的网络书籍《好奇的WebRTC》,并将尝试解决这一问题:)如果你对参与感兴趣/需要帮助,你应该加入!我是肖恩·德,完全可以谈论一般的WebRTC内容:)Pion只是一个开源项目/不是一家公司或任何东西