我试图通过使用自签名证书保护的SSL使用Maven 2存储库.我按照HTTPS中的说明和Java中的自签名证书进行操作,但我没有工作.
我认为这是因为证书是一张外卡证书.所以我想知道我是否应该做一些不同的事情来导入外卡证书?
我有一个简单的安全套接字服务器 - 客户端程序.
对于服务器证书,我使用keytool创建了一个密钥库.
当我尝试通过我的客户端连接到服务器时,我得到以下异常:
在服务器中:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
Run Code Online (Sandbox Code Playgroud)
在客户端:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
如果我的理解是正确的,那么这些例外是由于我使用我创建的证书这一事实引起的.
我的问题如下:
如果我在服务器和客户端中设置启用的密码套件,所有*_anon*密码套件,这不应该解决问题吗?
我的意思是如果我启用*_anon_*密码套件,则不需要身份验证,因此没有例外.
它是否正确?
因为我仍然有例外.我尝试在启用的密码套件中启用所有已启用的+ _anon密码套件.没有成功.我尝试只设置anon并获得一个新例外:
Exception in thread "main" java.lang.IllegalArgumentException: Name must not be null
Run Code Online (Sandbox Code Playgroud)
有人可以用anon密码套件解释为什么我会得到这些例外吗?
注意:
如果我在客户端上设置javax.net.ssl.trustStore指向我创建并由我的服务器使用的密钥库的系统属性,则通信正常!
该程序无异常,数据从客户端发送到服务器.
更新:
这是我用来启用匿名密码的片段(我已经为服务器和客户端部分做了这个):
String[] supported = server.getSupportedCipherSuites();
String[] anonCipherSuitesSupported = new String[supported.length];
int count = 0;
for(int …Run Code Online (Sandbox Code Playgroud) 我有一个服务器应用程序,它使用:
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
Run Code Online (Sandbox Code Playgroud)
这是一个java应用程序,它本身就是一个服务器 - 我没有使用任何虚拟服务器,也不是Web应用程序.它应该从客户端应用程序接收连接并处理它们的请求.客户端应用程序和数据库之间的夹层.
在启动它确实运行,但保持垃圾邮件(导致while(true){})此错误:
javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.checkEnabledSuites(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
所以,我查找了一些SSL证书创建指南,并使用这些命令制作了证书:
keytool -genkey -alias serverprivate -keystore servestore -keyalg rsa -keysize 2048
keytool -export -alias serverprivate -keystore servestore -rfc -file server.cer
Run Code Online (Sandbox Code Playgroud)
并将其导入我的本地证书存储,因此我可以使用我的客户端应用程序进行测试:
keytool -import -alias trustservercert -file server.cer -keystore clienttruststore
Run Code Online (Sandbox Code Playgroud)
所有这些都是在我的$ JAVA_HOME\bin目录中完成的.我还更新了我的eclipse.ini文件
-vm
$JAVA_HOME\bin\javaw.exe
Run Code Online (Sandbox Code Playgroud)
所以eclipse将使用我的jdk7虚拟机来运行应用程序.
同时,我试图复制server.cer和servestore文件到这两个$ ECLIPSE_HOME和应用程序的主目录.
结果是:相同的错误消息.它不会阻止应用程序运行,但它仍然存在.
非常感谢这里的一些帮助.我究竟做错了什么?也许有一个很酷的,详细的,新手友好的指南,用SSL创建应用程序,我找不到?
我正在尝试签署我的java applet.我运行以下行来创建证书:
keytool -genkey -keystore myKeyStore -alias ben
keytool -selfcert -keystore myKeyStore -alias ben
Run Code Online (Sandbox Code Playgroud)
到这里一切顺利.它需要密码和一些细节,并创建MyKeyStore文件.
然后我运行这一行:
jarsigner -keystore myKeyStore nnis.jar ben
Run Code Online (Sandbox Code Playgroud)
但它所做的只是告诉我:
Error: Could not find or load main class sun.security.tools.JarSigner
Run Code Online (Sandbox Code Playgroud)
文件tools.jar(其中存在JarSigner.class)位于"PATH"中,为了确保,我还将其复制到我运行jarsigner命令的本地目录.
我究竟做错了什么?
我将不胜感激任何建议 - 解决问题或绕过它.
我有很多时间尝试将我的Android应用程序与facebook连接,但是使用哈希键获取兴奋.我在这里读到了关于这个的问题,但没有成功解决我的问题
我运行此代码来获取哈希键
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.example.fishe",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("com.example.fishe", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
Run Code Online (Sandbox Code Playgroud)
它告诉我12-12 14:19:29.615:D/com.example.fishe(5834):5C440zhVwrb0ZQTs325My + VLZBo =
现在,当我运行应用程序并尝试登录时,我得到异常:(现在哈希是' - '而不是'+')
12-12 14:16:30.105:E /(5834):com.facebook.FacebookAuthorizationException:UnknownError:Key hash 5C440zhVwrb0ZQTs325My-VLZBo与任何存储的键哈希都不匹配.
我尝试在https://developers.facebook.com上插入应用程序 - >编辑设置 - >本机安卓应用程序,首次使用"+"键入哈希键,使用" - "键入第二次哈希键.最后两次都带有'='.我在这两种情况下得到了ecxception ......该怎么办?
我keys使用终端创建了一个名称为的密钥库
keytool -genkey -alias demo -keyalg RSA –keysize 2048 -keystore keys
Run Code Online (Sandbox Code Playgroud)
我想在我的 java 代码中加载这个密钥库:
ks = KeyStore.getInstance(KeyStore.getDefaultType());
java.io.FileInputStream fis = null;
try {
fis = new java.io.FileInputStream("keys");
ks.load(fis, password.toCharArray());
} finally {
if (fis != null) {
fis.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道我的密钥库“密钥”的路径。我知道的唯一经过验证的路径是受信任的密钥库
/usr/lib/jvm/java-7-oracle/jre/lib/security/cacerts
Run Code Online (Sandbox Code Playgroud)
我认为没有我的别名演示。如何在代码中加载我的密钥?
提前致谢
到目前为止,出于大多数学习目的,我试图使用Java的keytool生成SHA2证书。但是,当我生成密钥时,它说证书指纹是SHA1,而不是SHA2。
keytool -genkey -alias test_sha2_rsa_key -keyalg RSA -keysize 2048 -keystore .keystore -sigalg "SHA256withRSA"
Run Code Online (Sandbox Code Playgroud)
这是列出键时的结果。
keytool -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
test_sha2_rsa_key, Jul 6, 2016, PrivateKeyEntry,
Certificate fingerprint (SHA1): DD:9E:55:B7:90:9F:91:6C:68:D3:5C:24:E7:D4:45:D1:7D:8C:3A:5A
Run Code Online (Sandbox Code Playgroud)
我读错了还是做错了?
有人告诉我使用keytool命令将证书(.crt格式)添加到密钥库文件中。这里需要使用什么选项,import或-importcert。每个何时使用?
我有一个具有3个约束的Dockerfile:
1.)Dockerfile中的最终USER语句必须USER tomcat出于安全目的(它是基于tomcat:8.5.23-jre8-alpine映像构建的)
2.)它不能在/root/目录或目录下运行chmod$JAVA_HOME
3.)它必须能够$JAVA_HOME/lib/security在入口点内而不是在Dockerfile中修改目录(因为证书是在容器启动时传递的)
截至目前,我已经
FROM tomcat:8.5.23-jre8-alpine
#### OTHER IMAGE COMMANDS ####
COPY ./entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chown root:root /usr/local/bin/entrypoint.sh
RUN chmod 4755 /usr/local/bin/entrypoint.sh
USER tomcat
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["catalina.sh", "run"]
Run Code Online (Sandbox Code Playgroud)
我认为将文件所有权授予root和chmod 4755将允许tomcat用户执行入口点,但让入口点以root身份运行,以便它可以根据需要修改文件系统。但是,当我在入口点运行此行时
$JAVA_HOME/bin/keytool -import -alias ca_local -keystore $JAVA_HOME/lib/security/cacerts -storepass XXXXX -noprompt -trustcacerts -file /usr/local/tomcat/certificates/ca-local.cer
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
keytool error: java.io.FileNotFoundException: /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts (Permission denied)
Run Code Online (Sandbox Code Playgroud)
好像切入点实际上并没有以root身份运行,如chown / chmod所暗示的那样。我知道我所有的文件都放在正确的位置,因为当我USER tomcat从Dockerfile中删除时,一切正常。在设置入口点的权限时我缺少什么?
我最近收到了一个用于 haproxy SSL 终止的签名证书。为了让 haproxy 使用它,我需要将 jks 文件转换为 pem 文件。首先,我将收到的 cer 文件转换为 crt,因为我之前遇到过错误,haproxy 无法在 pem 文件中找到 crt 文件。对所有证书执行此操作:
$ openssl x509 -inform PEM -in <CER file here> -out <CRT output file>
Run Code Online (Sandbox Code Playgroud)
然后我将根证书、中间证书和服务证书导入到已经拥有私钥的密钥库:
keytool -importcert -file $CERT -alias $ALIAS -keystore test.jdk
Run Code Online (Sandbox Code Playgroud)
然后我将 jsk 文件转换为 p12 文件,然后将其转换为 pem 文件:
$ keytool -importkeystore -srckeystore test.jks -destkeystore test.p12 -srcstoretype jks -deststoretype pkcs12
Enter destination keystore password:
Re-enter new password:
$ openssl pkcs12 -in test.p12 -out test.pem
Enter Import Password:
MAC verified OK
Enter PEM …Run Code Online (Sandbox Code Playgroud) keytool ×10
java ×6
ssl ×5
certificate ×2
jsse ×2
security ×2
alias ×1
android ×1
chmod ×1
chown ×1
cryptography ×1
docker ×1
encryption ×1
facebook ×1
haproxy ×1
jar-signing ×1
jarsigner ×1
keystore ×1
maven-2 ×1
openssl ×1
sh ×1
truststore ×1