小编Cob*_*ink的帖子

如何知道哪个X509证书签署了另一个证书(Java)

在我的例子中有三个证书,假设它们形成一个链但我不知道它们中哪个签署了哪个:

X509Certificate c1 = ....
X509Certificate c2 = ....
X509Certificate c2 = ....
Run Code Online (Sandbox Code Playgroud)

我想知道哪个证书负责签署另一个证书.

计划是获取" AuthorityKeyIdentifier "并将其与" SubjectKeyIdentifier " 匹配.

import org.bouncycastle.asn1. DEROctetString;

private static String decodeKey(byte[] e) {
    DEROctetString octet = new DEROctetString(e);
    return octet.toString();
}

String subjectKeyId = decodeKey(c.getExtensionValue("2.5.29.14"));
String authorityKeyId = decodeKey(c.getExtensionValue("2.5.29.35"));
Run Code Online (Sandbox Code Playgroud)

我得到以下证书(按照链的顺序):主题/权限密钥ID对

解码后SubjectKeyIdentifier和AuthorityKeyIdentifier的值:

证书1 :(链的末尾)

#0416041482b7384a93aa9b10ef80bbd954e2f10ffb809cde
#04183016801482b7384a93aa9b10ef80bbd954e2f10ffb809cde
Run Code Online (Sandbox Code Playgroud)

证书2:由证书1签署

#04160414ab8059c365836d1d7d13bd19c3ec1a8f0d476aa3
#04183016801482b7384a93aa9b10ef80bbd954e2f10ffb809cde
Run Code Online (Sandbox Code Playgroud)

证书3:由证书2签署

(no SubjectKeyIdentifier - null bytes)
#041830168014ab8059c365836d1d7d13bd19c3ec1a8f0d476aa3
Run Code Online (Sandbox Code Playgroud)

格式化和对齐以便于阅读(与顶部相同)

------------------------------------------------------------------------------
       01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 …
Run Code Online (Sandbox Code Playgroud)

java certificate subject decoding x509

6
推荐指数
1
解决办法
1443
查看次数

使用类路径中的.p12文件进行GoogleCredential

我正在制作一个java命令行应用程序,该应用程序打包在一个使用某些Google API的JAR文件中.

我需要从私钥"Credentials.p12"设置GoogleCredential对象.

GoogleCredential credential = new GoogleCredential.Builder()
                    .setTransport(httpTransport)
                    .setJsonFactory(jsonFactory)
                    .setServiceAccountId("xxxxx@developer.gserviceaccount.com")
                    .setServiceAccountScopes(Arrays.asList(DirectoryScopes.ADMIN_DIRECTORY_GROUP, DirectoryScopes.ADMIN_DIRECTORY_USER, DirectoryScopes.ADMIN_DIRECTORY_ORGUNIT))
                    .setServiceAccountUser(emailAccount)
                    //THE CODE BELOW IS IMPORTANT: I need to change this
                    .setServiceAccountPrivateKeyFromP12File(new File("Credentials.p12"))
                    .build();

        directory = new Directory.Builder(httpTransport, jsonFactory, credential)
                .setApplicationName("My Cmd App")
                .build();
Run Code Online (Sandbox Code Playgroud)

现在我能够使它工作,但文件"Credentials.p12"位于打包的JAR文件之外.

如何使用JAR内部的p12文件使其工作?

从这个文档中,我认为我可以使用的唯一其他替代方法是使用PrivateKey对象的方法变体.我正在考虑使用InputStream从类路径获取p12文件:

InputStream is = this.getClass().getResourceAsStream("Credentials.p12");
Run Code Online (Sandbox Code Playgroud)

我完全不知道该怎么做.

在您回答之前,请确保您有使用Google OAuth2库的经验.并且,请不要将资源复制到临时文件中:如果出于某种原因,Credential.p12的单数版本应该保留在JAR中.

java google-oauth2 private-key

4
推荐指数
1
解决办法
1530
查看次数

电子邮件域的 HTML 输入模式

我尝试使用HTML输入标记的模式属性,使用以下代码对特定电子邮件域进行简单的客户端验证:

<input type="text" pattern="^[A-Z0-9._%+-]+@domain\.com\.ph$" />
Run Code Online (Sandbox Code Playgroud)

我预计以下输入会成功: test.test@domain.com.ph

但不知怎的,它似乎不起作用。我使用了不正确的正则表达式吗吗?

为了消除一些答案,我尝试检查以下内容:

  • 浏览器支持模式验证
  • 模式^[A-Z0-9._%+-]+@domain.com.ph$
  • 模式^[A-Z0-9._%+-]+@domain.com.ph

html regex input pattern-matching

3
推荐指数
1
解决办法
5540
查看次数