gpt4 book ai didi

android - 使用 javacard 生成签名 CSR 时出错(asn1 错误标记值)

转载 作者:太空狗 更新时间:2023-10-29 15:59:39 25 4
gpt4 key购买 nike

我在 java 卡中生成了 key 对并返回了公钥。我在 android 应用程序中再次生成公钥,然后在 android 中生成 CSR

 private byte[] CertReqGeneration()  throws Exception
{
if(publickeyobj==null)
return null;

String info = "CN=cn, OU=ou, O=o, C=cn, ST=city";
X500Principal x500 = new X500Principal(info);

X500Name x500name;
x500name= X500Name.getInstance(x500.getEncoded());

CertificationRequestInfo csrInfo = new CertificationRequestInfo(x500name, publickeyobj, new DERSet());

ASN1EncodableVector v = new ASN1EncodableVector();
v.add(csrInfo);
ASN1ObjectIdentifier oid = new ASN1ObjectIdentifier("0.0");
v.add(new DERSequence(oid));
v.add(new DERBitString(new byte[] {}));
byte[] encoded = new DERSequence(v).getEncoded();
byte[] PKCS10= DataSignGeneration(encoded);

byte[] encoded = Base64.encode(PKCS10);
String base64=new String(encoded);
return base64;

}

但是当我想在 ca 中发布它时,我收到错误 asn1 bad tag value met 0x8009310b

这是我登录小程序的代码:

  //sign
Signature signature=Signature.getInstance(Signature.ALG_RSA_SHA_PKCS1,false);
signature.init(thePrivateKey,Signature.MODE_SIGN);
signLength=signature.sign(buffer,(short)(ISO7816.OFFSET_CDATA & 0xFF), inputlength, buffer, (short)(0));

这是我的代码生成的签名 csr

G1Xsg/fetpr1/RfbUzWmDqRqu2GvymoQwXUJS/tB36l1SAvrRyDtwCgVHB3ukYFSZJeavFISQ9+R4zD1qxjO6r/E2/3o9UfARm2GeTwEZFv8LVgULAPc/e64v5xkiQYO05QwHa5PtmaXXD4NtuSNvF9xgNjtdAkosKqEPLcme5k=

最佳答案

让我们先看看您生成的 CSR。我用 an online ASN.1 decoder .

嗯,在线工具不会解码您的 CSR。所以它是无效的:

enter image description here

好的,让我们看看有效的 CSR 是什么样的。我使用 OpenSSL 生成了 CSR:

ghasemi@ghasemi-MS-7693:~$ openssl genrsa -out priv.key 1024
Generating RSA private key, 1024 bit long modulus
............................++++++
.......................++++++
e is 65537 (0x10001)
ghasemi@ghasemi-MS-7693:~$ ls
priv.key
ghasemi@ghasemi-MS-7693:~$ openssl req -new -key priv.key -out my_csr.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IR
State or Province Name (full name) [Some-State]:Tehran
Locality Name (eg, city) []:Tehran
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company
Organizational Unit Name (eg, section) []:Section
Common Name (e.g. server FQDN or YOUR name) []:Ebrahim
Email Address []:ebr.ghasemi at gmail

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

ghasemi@ghasemi-MS-7693:~$ ls
my_csr.csr priv.key

正如您在上面看到的,我生成了一个带有 1024 位 key 对的 CSR。看内容:

ghasemi@ghasemi-MS-7693:~$ cat my_csr.csr 
-----BEGIN CERTIFICATE REQUEST-----
MIIByzCCATQCAQAwgYoxCzAJBgNVBAYTAklSMQ8wDQYDVQQIDAZUZWhyYW4xDzAN
BgNVBAcMBlRlaHJhbjEQMA4GA1UECgwHQ29tcGFueTEQMA4GA1UECwwHU2VjdGlv
bjEQMA4GA1UEAwwHRWJyYWhpbTEjMCEGCSqGSIb3DQEJARYUZWJyLmdoYXNlbWkg
YXQgZ21haWwwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJK2YUOSREjrDbZ
auC3/509NOAL+xjqJ2x947CtSIyuPSLuplDW4oAkvaqYvA5ocIxeAGbW9WZF/OdM
8z5XoQF3+ogGsEna1TZN1TY5XOdrRgIu9gFA2KRNPjnEZIkt7FLBJUQlk5aithk4
lfy73XCoosjWUwBOKac5ZIKOuXEHAgMBAAGgADANBgkqhkiG9w0BAQsFAAOBgQCF
hQzkAgfongzP9EKV+oTwVhqkQ7bfy5TE85YIR3aymuzbvAc9KWdWydOxHiHqXbmZ
ECWvLlMsrlrpyDO2Xxy8UXFJkNgH4Rys267ETaoYh19htc4qZzNqK/1ejQBUidgY
QoafJxv3YhO+gYr2txyxPRN0etcquElwx0odF8KBVA==
-----END CERTIFICATE REQUEST-----
ghasemi@ghasemi-MS-7693:~$

嗯,明显的不同是长度以及开始和结束行。我的 CSR 真的比你的大。它以 -----BEGIN CERTIFICATE REQUEST----- 开始,也以 -----END CERTIFICATE REQUEST----- 结束。

让我们用 ASN.1 解码器检查它的内容:

enter image description here

好的。如您所见,我在 CSR 生成期间以纯文本形式在 CSR 中输入了字符,但在您的中没有。

怎么了?

您的小程序,仅返回您的 CSR 信息的签名。它不是 CSR,它只是它的签名。因此,您必须使用 CSR 信息签名 生成 CSR。此外,CSR 信息中使用的公钥必须是其私钥用于生成签名的公钥,否则 CA 将无法验证 CSR 的有效性,并将您的 CSR 视为伪造/伪造的 csr .

因此,在卡内生成KeyPair后,将公钥导出到android应用程序。然后生成 CSR 信息并在卡内生成此信息的签名,然后使用 csr 信息和签名构建您的 CSR。

关于android - 使用 javacard 生成签名 CSR 时出错(asn1 错误标记值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40206962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com