我有一个CA颁发的PKCS#7格式的CERT.它内有证书(链接).Keytool无法识别PKCS7格式.我已经尝试过OpenSSL工具将PKCS7格式证书转换为PEM格式,但它失败了.我收到错误消息"无法加载PKCS7对象".
如何将PKCS7证书链导入我的JKS?
我用公共和私有RSA密钥创建了一个JKS文件.当我使用外部路径(如c:/file.jks)加载此文件时,程序就像魅力一样执行.但是,如果我尝试从类路径加载此相同的文件,我得到此异常:
java.io.IOException: Invalid keystore format
Run Code Online (Sandbox Code Playgroud)
这是用于加载jks的代码:
KeyStore keyStore = KeyStore.getInstance("JKS");
InputStream stream=this.getClass().getResourceAsStream("/lutum.jks") ;
keyStore.load(stream,passe);
Run Code Online (Sandbox Code Playgroud)
唯一的区别是我在外部加载时使用FileInputStream和完整路径.我做错了什么?
我已经创建了一个基本的JWT生成器,但需要在几个方面提供建议.我一直在使用JWT.io的指南和auth0/java-jwt库/ repo来生成令牌.
JWT正在使用2个不同的密钥进行签名.
使用RSA512算法使用4096位密钥对刷新令牌进行签名.
.sign(Algorithm.RSA512(rsaPublicKey, rsaPrivateKey));
Run Code Online (Sandbox Code Playgroud)
通过RSA256算法使用1024位RSA密钥对访问令牌进行签名.
.sign(Algorithm.RSA256(rsaPublicKey, rsaPrivateKey));
Run Code Online (Sandbox Code Playgroud)
由于4096位验证过程需要更长的时间,因此我对"速度"的建议已经采用了这一点,但似乎对刷新令牌的请求较少,安全性的权衡似乎是公平的.
另一方面,访问令牌在资源服务器端点进行验证,并且它们被更频繁地发送,因此我选择了更短(256)的签名,该签名使用更快的1024位密钥进行.
我知道钥匙"几乎"不可能破坏......但建议使用钥匙旋转?
我将jks(密钥库)保存在auth服务器和资源服务器上的私有文件夹中.密钥库包含2个密钥对,一个用于刷新令牌签名/验证,另一个用于访问令牌签名/验证.
我需要刷新/形成新密钥吗?如果是这样......多久一次?建议的方法是什么?
在负载均衡器后面可以有多个auth和资源微服务实例...因此RAM生成的密钥是否为,因为它们不会在实例之间传播.
我已经看过可能有一个"密钥服务器",可以说创建新密钥并将它们附加到密钥库并将新的jks文件更新为新的密钥对...类似于:

因此,例如,每隔15秒,EC2 auth服务器和资源服务器ping密钥服务器,请求当前jks的副本(和版本检查).
有什么建议?
谢谢!
JKS(Java密钥库)文件是否已加密?它们是否为加密密钥提供全面保护,还是仅仅依靠访问控制?
有没有办法确保密钥受到保护?
我对细节很感兴趣,包括算法,密钥管理等.这些都是可配置的吗?
我正在尝试org.apache.ws.security.components.crypto.Merlin使用org.apache.ws.security.components.crypto.CryptoFactory特定CryptoFactory.getInstance(properties)方法的实例.
这将是一致的
java.lang.RuntimeException: org.apache.ws.security.components.crypto.Merlin cannot create instance
这显然是由
java.security.UnrecoverableKeyException: Password verification failed
已使用命令行上的keytool检查密钥库文件上的密码是否正确.
密钥库是通过以下过程生成的:

这是在eclipse项目的根目录中.
测试应用程序如下:
public class App {
public static void main(String[] args) throws CredentialException,
IOException {
System.out.println("Starting");
Properties p = new Properties();
p.setProperty("org.apache.ws.security.crypto.merlin.keystore.password",
"password");
p.setProperty("org.apache.ws.security.crypto.provider",
"org.apache.ws.security.components.crypto.Merlin");
p.setProperty("org.apache.ws.security.crypto.merlin.keystore.type",
"jks");
p.setProperty("org.apache.ws.security.crypto.merlin.file", "./testkeystore.jks");
Crypto crypto = CryptoFactory.getInstance(p);
System.out.println(" Complete ");
}
}
Run Code Online (Sandbox Code Playgroud)
并生成以下异常:
Exception in thread "main" java.lang.RuntimeException: org.apache.ws.security.components.crypto.Merlin cannot create instance
at org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:225)
at org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:180)
at org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:73)
at com.restart.test.cryptotest2.App.main(App.java:22)
Caused by: java.lang.reflect.InvocationTargetException
at …Run Code Online (Sandbox Code Playgroud) 我正在不同主机上的服务之间设置 2 路 SSL 通信。假设我有自己的 CA,名为 A。A 通过集中式 jks 受到我的所有服务的信任。现在假设我有由 A 签名的证书 B。当服务发送证书时,它们应该发送整个链 B - A,还是只发送 B?我相信两者都适用于大多数实现。
我试图在网上找到有关此问题的规范信息,但一无所获。
谢谢您的帮助
尝试使用12.1.0.2 JDBC Thin驱动程序连接到Oracle Database 12c时,我们遇到异常.我们正在使用TLSv1.2和JKS证书.但是,我们无法成功连接到数据库.
线程"main"中的异常java.sql.SQLRecoverableException:IO错误: 收到致命警报:handshake_failure
我有一个Android应用程序,我试图使用quixxi.com保护,但它需要我再次签署该应用程序.但要做到这一点,它必须使用.jks文件,但我的密钥库是.keystore
我在Visual Studio 2017中使用C#中的Xamarin.Android
有没有办法解决?
我在使用Google授权方面遇到了一些麻烦,而且之前从未使用过任何“涉及Google凭证的”流程。
我的问题发生在创建凭证读取器之后(我认为这意味着我可以正确访问Google凭证的JSON文件),就在从中实例化新的Trusted Transport的行中GoogleNetHTTPTransport。在那里,抛出异常错误:
W/System.err: java.security.KeyStoreException: JKS not found
at java.security.KeyStore.getInstance(KeyStore.java:649)
at com.google.api.client.util.SecurityUtils.getJavaKeyStore(SecurityUtils.java:53)
at com.google.api.client.googleapis.GoogleUtils.getCertificateTrustStore(GoogleUtils.java:74)
at com.google.api.client.googleapis.javanet.GoogleNetHttpTransport.newTrustedTransport(GoogleNetHttpTransport.java:55)
at com.example.juans.hasapp.getDataFromSheet.authorize(getDataFromSheet.java:70)
Run Code Online (Sandbox Code Playgroud)
我一直在调查,但是仍然找不到关于这些运输工具如何工作或为什么KeyStore参与此过程的正当而清晰的解释。
我的代码是AsyncTask我用来从Google表格中获取数据的一部分,我目前正试图对其进行访问。在这里,我留下了您的authorize()方法,该方法将检索我并将Credential其传递给我SheetsService。
private Credential authorize(Context context) {
Resources resources = context.getResources();
InputStream jsonInput = resources.openRawResource(R.raw.credential_info);
Reader credentialReader = null;
try {
credentialReader = new InputStreamReader(jsonInput);
Log.v("GoogleAut", "credential reader created");
} catch (NullPointerException n){
Log.v("ERROR GoogleAut", "filePath came out empty, no info provided");
}
GoogleClientSecrets clientSecrets = null;
try {
clientSecrets …Run Code Online (Sandbox Code Playgroud) 我可以使用以下属性之一指定密钥库 - Java 特定的 javax.net.ssl.keyStore 或 spring boot 特定的 server.ssl.key-store。有什么区别吗?我想使用密钥库为我的应用程序提供服务,使用 https 以及通过一些 REST 服务进行相互客户端身份验证
如果密钥库未指定为属性或 jvm 参数,而是在启动时使用自定义代码读取,那么 SpringBoot 应用程序是否可以使用 https 提供服务?或者如果应用程序必须使用 https 提供服务,密钥库规范是否必须在此之前?
jks ×10
keystore ×5
java ×3
security ×3
android ×2
encryption ×2
ssl ×2
certificate ×1
classpath ×1
credentials ×1
cryptography ×1
java-8 ×1
jdbc ×1
jwt ×1
keytool ×1
oracle ×1
pkcs#7 ×1
spring-boot ×1
token ×1
xamarin ×1