java server怎样和c++ client实现SSL通信??

2019-03-25 13:46|来源: 网路

java keytool生成的证书是CRT等格式的,这种格式是2进制编码的,而C++用的证书格式是pem,pem是ascii编码的。
我用keytool无法生成pem,并且又无法把C CLIENT给我的pem放进我的truststore中。
weblogic还只能用JKS来实现SSL 
求高端玩家帮忙呀。。。

问题补充:
beneo 写道
socket跟语言无关

没错 但是产品和语言有关  有个中转服务器用的oracle service bus 。只支持JKS格式 也就是java的KEYTOOL生成的key库。所以才有了我现在问的这个问题

问题补充:
beneo 写道
引用

java keytool生成的证书是CRT等格式的,这种格式是2进制编码的,而C++用的证书格式是pem,pem是ascii编码的。

有个中转服务器用的oracle service bus 。只支持JKS格式 也就是java的KEYTOOL生成的key库。所以才有了我现在问的这个问题


那是否就是说,我只需要能够把c client产生的证书用 Reader读一下,然后在用 outputStream写一下,就能生成2进制的文件呢?如果不行的话,注意下big endian 和 little endian,这个是C++和java互通经常存在的问题



不是用Stream读的 是配置路径OSB自己读的。现在找到了一些办法 还没试成功。因为keytool用的CA server和C的CA server不一样,所以用了OPENSSL的CA给他们统一签名,并且OPENSSL可以让DER,PEM互相转换。思路现在大致有的,也做了,但是还没成功哈。

相关问答

更多
  • 在这里,我把一个简单的代码连接到服务器。 如果这是你的问题,它可能会帮助你。 void client(const char* server_address, short server_port) { int sockfd; struct sockaddr_in servaddr; sockfd = socket(AF_INET, SOCK_STREAM, 0); memset(&servaddr, 0x00, sizeof(servaddr)); ...
  • 您在tomcat中配置SSL,因此tomcat处理SSL请求。不需要更改服务器端的任何代码。 You configure the SSL in tomcat , So tomcat handles SSL request.No need to change any code in server side.
  • 只要您通过套接字发送和接收消息(以字节为单位),您可以使用您希望的任何语言编写服务器,这些字节不是特定于语言且易于实现的。 这样,您还可以轻松切换到分布式应用程序。 如果服务器和客户端在同一台计算机上,只需为它们分配不同的端口即可。 这是一个难以回答的问题,因为你的措辞,似乎你想要建筑和实施解决方案,第一个是,一点,主观,后者相当复杂。 对于有用的Java库,请查看Java RMI和CORBA。 也许其他人知道这样做的更好更简单的方法,这是我想到的第一件事。 另一种方法是让每个客户端直接处理他们自己的数据库 ...
  • 在Web安全虚拟速成课程之后,我终于推测应用程序环境中的根证书需要更新。 我找到了一个名为InstallCert.java的实用程序,它将确定特定主机所需的根证书并将它们写入文件。 我用它来创建这样一个文件,也称为信任库 ,并将其重命名为“cacerts.jks”,这是Glassfish(3.1.1)用于信任库的文件名。 我将它复制到Glassfish环境中的两个cacerts.jks副本(在/glassfish3/glassfish/lib/templates和/glassfish3/glassfish/ ...
  • 我正在读取错误的文件作为构建SslContext的证书文件。 用正确的证书文件替换错误的输入解决了问题。 I was reading the wrong file as the certificate file for building the SslContext. Replacing the incorrect input with the right certificate file fixed the issue.
  • 没有办法保证收到服务器的数据来自Java应用程序的合法版本。 如果您使用任何形式的加密,则密钥必须存储在应用程序字节码中的某个位置。 此外,破解客户端应用程序并让它发送无效数据并不是很困难。 正确的方法是在服务器端记住,您的数据可能不是来自正确的来源,因此您必须验证所有数据,以确保没有违法行为。 如果您只是想保证使用客户端应用程序的合法用户可以确定他们正在与您的服务器进行通信,则可以使用HTTPS或其他使用非对称加密的方法。 There is no method of guaranteeing that t ...
  • anwser对于这个错误有点奇怪,但最终我设法修复它。 问题出在C#DataStream类中使用套接字。 相反,我应该使用SSLStream来写入和读取客户端的数据。 我认为对于每个试图自己管理IO而不是使用BinaryWriter和BinaryReader的人来说,这可能是一个常见的错误。 SSLStream _clientSocket; //DataStream class public DataStream(SSLStream clientSocket) { _clientSocket = c ...
  • 好吧,总有JSON。 它应该在两端都得到良好支持,并且您的服务器很容易生成和客户端使用。 不确定它有助于您的带宽问题... Well, there's always JSON. It should be well-supported on both ends and is easy for your server to generate and client to consume. Not sure it helps with your bandwidth concerns any...
  • 我认为你的意思是你使用ntohs来解码从网络读取的值,并使用htons来编码通过网络发送的值。 与ByteBuffer#order(ByteOrder)一起查看ByteBuffer#getShort() ByteBuffer#order(ByteOrder) 。 网络字节顺序是大端 ,因此使用值ByteOrder#BIG_ENDIAN正确配置ByteBuffer 。 请注意, BIG_ENDIAN是默认顺序,但在这种情况下,明确说明您的首选项将是一种很好的形式。 您没有提到您在Java中用于网络通信的内容。 ...
  • 您可以创建特定的SSLContext (使用通过包含客户端证书+私钥的密钥库初始化的KeyManager ),从中派生SSLSocketFactory ,您可以将其设置到HttpsURLConnection ,或使用全局设置。 您可以设置以下系统属性(对于全局设置): javax.net.ssl.keyStore=path/to/keystore.pfx javax.net.ssl.keyStoreType=PKCS12 javax.net.ssl.keyStorePassword=xxxxxxxxx 或者 ...