在我的例子中有三个证书,假设它们形成一个链但我不知道它们中哪个签署了哪个:
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命令行应用程序,该应用程序打包在一个使用某些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中.
我尝试使用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.phjava ×2
certificate ×1
decoding ×1
html ×1
input ×1
private-key ×1
regex ×1
subject ×1
x509 ×1