我在activemq配置中有这个
<sslContext>
<sslContext keyStore="file:/home/alex/work/amq/broker.ks"
keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts"
trustStorePassword="password"/>
</sslContext>
Run Code Online (Sandbox Code Playgroud)
我有一对x509证书和一个密钥文件
如何导入这两个用于ssl和ssl + stomp连接器?我可以谷歌的所有例子总是自己生成密钥,但我已经有了密钥.
我试过了
keytool -import -keystore ./broker.ks -file mycert.crt
Run Code Online (Sandbox Code Playgroud)
但这只导入证书而不是密钥文件并导致结果
__CODE__
我尝试连接证书和密钥但得到了相同的结果
如何导入密钥?
在开发Java Web服务客户端期间,我遇到了一个问题.Web服务的身份验证使用客户端证书,用户名和密码.我从webservice后面的公司收到的客户证书是.cer格式化的.当我使用文本编辑器检查文件时,它具有以下内容:
-----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
我可以在Internet Explorer中将此文件作为证书导入(无需输入密码!)并使用它来通过Web服务进行身份验证.
通过首先剥离第一行和最后一行,转换为unix换行符并运行base64-decode,我能够将此证书导入密钥库.可以将生成的文件导入密钥库(使用该keytool命令).当我列出密钥库中的条目时,此条目属于该类型trustedCertEntry.由于此条目类型(?),我无法使用此证书对Web服务进行身份验证.我开始认为提供的证书是用于身份验证的公共证书...
我找到的解决方法是在IE中导入证书并将其导出为.pfx文件.此文件可以作为密钥库加载,并可用于对Web服务进行身份验证.但是,我不能指望我的客户每次收到新证书时都会执行这些步骤.所以我想将.cer文件直接加载到Java中.有什么想法吗?
附加信息:webservice背后的公司告诉我,应该从PC和用户那里请求证书(使用IE和网站),以便稍后导入证书.
我正在尝试用我正在编写的Android应用程序中的HTTPS连接替换当前正在运行的HTTP连接.HTTPS连接的额外安全性是必要的,因此我不能忽略此步骤.
我有以下内容:
SSLSocketFactory.getSocketFactory()连接工作正常,但客户端证书是此应用程序规范的必需部分,因此:javax.net.ssl.SSLPeerUnverifiedException: No peer certificate当我尝试连接我的自定义时SSLSocketFactory,客户端会产生异常,但我不完全确定原因.在互联网上搜索各种解决方案后,这个例外似乎有点模棱两可.以下是客户端的相关代码:
SSLSocketFactory socketFactory = null;
public void onCreate(Bundle savedInstanceState) {
loadCertificateData();
}
private void loadCertificateData() {
try {
File[] pfxFiles = Environment.getExternalStorageDirectory().listFiles(new FileFilter() {
public boolean accept(File file) {
if (file.getName().toLowerCase().endsWith("pfx")) {
return true;
}
return false;
}
});
InputStream certificateStream = null;
if (pfxFiles.length==1) {
certificateStream = new FileInputStream(pfxFiles[0]);
}
KeyStore keyStore = KeyStore.getInstance("PKCS12");
char[] password = "somePassword".toCharArray();
keyStore.load(certificateStream, password); …Run Code Online (Sandbox Code Playgroud) 我需要从使用客户端证书进行身份验证的服务器请求URL,但无法找到为我的应用程序执行此操作的方法.
我的问题是我正在处理的Java客户端有本地可用的证书文件,但是由于它将在其上运行的PC的限制,它无法在密钥库中安装证书.
简而言之,我只是希望能够明确指定用于我需要检索的URL的证书.
有什么建议?
我有这个代码使用SSL连接服务器和客户端,现在我想添加客户端身份验证:
(我有一个服务器密钥库(JCEKS类型)和一个客户端密钥库(JKS类型),服务器使用信任库(cacerts),我导入了两个证书,因为我也想使用此信任库进行客户端身份验证)
客户代码:
System.setProperty("javax.net.ssl.trustStore", cerServer);
System.setProperty("javax.net.ssl.trustStoreType","JCEKS");
System.setProperty("javax.net.ssl.trustStorePassword", pwdCacerts);
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("localhost", port);
Run Code Online (Sandbox Code Playgroud)
服务器代码:
KeyStore ks = LoadKeyStore(new File(serverKeyStore), pwdKeyStore, "JCEKS");
KeyManagerFactory kmf;
kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, pwdKeyStore.toCharArray());
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(kmf.getKeyManagers(),null, null);
SSLServerSocketFactory ssf = sc.getServerSocketFactory();
sslserversocket = (SSLServerSocket) ssf.createServerSocket(port);
Run Code Online (Sandbox Code Playgroud)
提前感谢您的帮助.
编辑:我在服务器端添加此代码:
System.setProperty("javax.net.ssl.trustStore", cacerts);
System.setProperty("javax.net.ssl.trustStoreType","JKS");
System.setProperty("javax.net.ssl.trustStorePassword", pwdCacerts);
Run Code Online (Sandbox Code Playgroud)
但如果我在cacerts中删除客户端证书,连接不会给我错误,因此我认为这是错误的
我正在本地测试客户端和服务器之间的SSL通信.所以我使用OpenSSL命令生成证书.在cacert文件中添加了此证书.还生成.p12文件.
我在服务器和客户端使用相同的.p12文件.这是服务器代码
Server server = component.getServers().add(Protocol.HTTPS, port);
Series<Parameter> params = server.getContext().getParameters();
params.add("keystorePath", ".p12 file path");
params.add("keystoreType", "PKCS12");
params.add("needClientAuthentication","true");
component.getDefaultHost().attach("", "/AA"), new AAClass());
component.start();
Run Code Online (Sandbox Code Playgroud)
这是客户端代码:
Client client = trustAllCerts();
clientResource = new ClientResource(url);
clientResource.setNext(client);
try{
clientText = clientResource.post"");
}
catch(ResourceException e){
e.printStackTrace();
}
public Client trustAllCerts() {
Client client = null;
try {
client = new Client(new Context(), Protocol.HTTPS);
Context context = client.getContext();
final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
context.getAttributes().put("sslContextFactory", new SslContextFactory() {
public void init(Series<Parameter> parameters) {
}
public SSLContext createSslContext() …Run Code Online (Sandbox Code Playgroud) 我正在尝试执行对服务器的请求,该服务器向我提供了.p12文件,以便与其余服务建立安全连接,我正在执行以下操作,以使用密钥设置HttpClient:
SSLContext sslContext =SSLContextBuilder
.create().loadKeyMaterial(ResourceUtils.getFile("classpath:keystore/file.p12"), "secret".toCharArray(), "secret".toCharArray())
.build();
return HttpClientBuilder
.create()
.setConnectionManager(connManager())
.setSSLContext(sslContext)
.setDefaultRequestConfig(requestConfig())
.build();
Run Code Online (Sandbox Code Playgroud)
当我使用OAuth2RestOperations执行请求时,我得到了:
401 , Non existing certificate or invalid
Run Code Online (Sandbox Code Playgroud) 我有两个文件:mycer.cer mykey.key
我需要使用java创建SslContext以通过SSL连接到另一台服务器.我试图找出如何直接从这些文件创建SslContext对象.
这篇文章可能是重复的,但我试图用一个例子找到一个清晰的解释来创建SslContext,但没有找到清楚的东西.
提前致谢
我想在服务A和B之间使用相互SSL身份验证.我目前正在实现从Java中的服务A传递客户端证书.我正在使用Apache DefaultHttpClient来执行我的请求.我能够从内部凭据管理器检索我的服务A的客户端证书,并将其保存为字节数组.
DefaultHttpClient client = new DefaultHttpClient();
byte [] certificate = localCertManager.retrieveCert();
Run Code Online (Sandbox Code Playgroud)
我在这方面的经验很少,我很感激你的帮助!
我想也许它应该以某种方式通过HTTP客户端或可能在标头中的参数传递.
如何使用HTTP客户端传递客户端证书?
我需要能够发送证书文件(.pem,我认为),使用scala和dispatch发送get请求.
你是怎样做的?
似乎我们无法配置我们的Java客户端来正确处理SSL连接.
我们可以使用具有指定客户端证书和curl工具的浏览器成功连接到HTTPS URL,但不能使用我们的java客户端或基于java的SOAP UI工具.即使我们在浏览器中使用相同的*.p12证书(工作正常)并在SOAP UI工具中(不起作用).
所以,我们有以下信息:
我们将这些pem证书转换为jks和p12,并使用apache http client进行连接.并且正如提到的那样,相同的证书适用于浏览器,但对于自定义客户端或基于Java的Java UI都不起作用.
首先,我猜测我们在那里描述了以下问题:
当服务器请求客户端证书(作为TLS握手的一部分)时,它还将提供可信CA的列表作为证书请求的一部分.如果您希望提供用于身份验证的客户端证书未由其中一个CA签名,则根本不会显示该证书
但似乎我们有这样的问题它不会解析浏览器的这个证书.因为默认情况下浏览器默认不允许使用不正确的(具有不同的颁发者)证书.
我根据以下教程创建的客户端:
所以,基本上我有问题:
我们尝试使用openssl s_client工具.输出显示服务器证书符合我们的预期,但客户端证书验证没有CA:未
发送客户端证书CA名称
openssl s_client的语法,如果使用连接到443而没有指定模式(https://).所以我们决定在没有架构的情况下在浏览器中尝试我们的URL但使用443端口.服务器响应:
普通HTTP请求已发送到HTTPS端口
接下来我们在这次调查中的步骤是尝试wireshark.首先我们使用浏览器进行了正确的会话,然后我们尝试了我们的应用 我们也试过openssl s_client.
区别在于服务器密钥交换数据包.虽然浏览器数据包有一个证书请求,但openssl和我们的应用程序在该数据包中没有这样的字段.此外,如果浏览器不发送任何证书,则该字段仍然存在于数据包中.
因此,只有浏览器获得证书请求.任何关于为什么会发生这种情况的想法都值得赞赏
openssl s_client -connect your.server.name:443 我们返回有效的服务器证书并且没有发送客户端证书CA名称.我们还得到验证错误:num = 2:无法获得颁发者证书.经过一些调查和研究,我们设法找出问题的根本原因.所以我们在服务器上启用了SNI(服务器名称指示),我们的应用程序正在使用apache httpclient 4.2.1.此版本的客户端不支持SNI扩展,也不在Client Hello数据包中发送server_name扩展.之后该服务器不通告客户端使用客户端证书进行身份验证.此问题已在4.3.2版本中修复.
现在我们正在尝试检查4.3.2版本的httpclient是否正确发送server_name扩展.
如何使用证书访问授权服务.并添加请定义java密钥库.我是非常新的这些过程.我在尝试与此相关时遇到以下错误
cause javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException
Run Code Online (Sandbox Code Playgroud)我在最后一个月挣扎.请任何人做必要的.原谅我语法错误.
我使用wsdlc ANT任务从wsdl创建了一个JAXWS Web服务,并部署在Weblogic 10.3.0中.我们有Sun one Java Server 7.0,其中安装了Verisign Server证书并配置为将webservice请求转发到weblogic.
我使用wsimport ant任务创建了一个JAXWS客户端来调用webservice.使用https URL运行客户端时,我可以看到weblogic中的xml请求,并成功处理了webservice.但我无法在xml请求/响应中找到任何x509证书的证据.除了使用wsimport生成存根之外,我是否需要在客户端执行任何操作?通过浏览器查看wsdl时,我可以通过浏览器查看证书详细信息.