thrift ssl 证书整理
一、生成证书,所需机器数必须 >= 2(一台生成服务端证书,一台生成客户端证书),以下服务器以A表示服务端、B表示客户端来举例,thrift版本为0.7.0
1、自签名的证书的生成和测试
1)生成密钥和证书相关
服务端A,
openssl genrsa -out server-key.pem 2048
openssl req -new -x509 -key server-key.pem -out server-cert.pem -days 10000
客户端B
openssl genrsa -out client-key.pem 2048
openssl req -new -x509 -key client-key.pem -out client-cert.pem -days 10000
由key生成keystore,crt生成truststore(针对服务端,客户端的类似)
openssl pkcs12 -export -in server-cert.pem -inkey server-key.pem -out server.pkcs12 打包服务器端资料为pkcs12格式
keytool -importkeystore -srckeystore server.pkcs12 -destkeystore server.jks -srcstoretype pkcs12 生成keystore,使用keytool的importkeystore指令。pkcs12转jks。需要pkcs12密码和jks密码。
keytool -importcert -alias servercert -file server.crt -keystore servertrust.jks 把Server证书加到对外KeyStore里面。
2)测试
1、c++---c++ 成功
环境:linux6u3-64
A:./server 9091 self_signed_normal/server-cert.pem self_signed_normal/server-key.pem self_signed_normal/client-cert.pem
B:./client A 9091 selfsigned/client-cert.pem selfsigned/client-key.pem selfsigned/server-cert.pem
2、java---java成功
1)环境:win7
A:keystore:server.jks
B: truststore: servertrust.jks
2)环境:linu6u3-64
A:keystore:server.jks
B: truststore: servertrust.jks
3)环境:
A:linux6u3-64 keystore:server.jks
B:win7 servertrust.jks
4)环境:
A:win7
B:linux6u3-64
3、c++---java 部分成功
1)不成功:c++在A机器,java在B机器(c++做服务端,java做客户端)
A端报的错误:TThreadedServer client died: SSL_accept: wrong version number
2)成功(java做服务端,c++客户端)
环境:
A:linux6u3-64 java server.jks
B:./client A 9091 selfsigned/client-cert.pem selfsigned/client-key.pem selfsigned/server-cert.pem 、、
注意:若B运行命令行中A的IP填的不是A的IP(原始生成服务端证书的IP),则报ERROR: authorize: cannot authorize peer,原因是IP不是服务端证书的IP
所以针对c++做客户端的情况,服务端程序必须与生成服务端证书的机器是同一台(java做客户端则不需要)()
结论:
1、客户端在连接服务端时 需指定服务端IP为创建服务端证书的IP
2、c++作为服务端,java作为客户端,都不成功(但是外网0.9.3版本的thrift,socketFactory->authenticate(false);时能够成功,0.7.0无论如何都不行)
2、根证书颁发
1)根证书IP 192.168.137.10
openssl genrsa -out rootkey.pem 2048
openssl req -x509 -new -key rootkey.pem -out root.crt
2)客户端IP 192.168.137.11
openssl genrsa -out clientkey.pem 2048
openssl req -new -key clientkey.pem -out client.csr
openssl x509 -req -in client.csr -CA root.crt -CAkey rootkey.pem -CAcreateserial -days 3650-out client.crt
3)服务端IP 192.168.137.12
openssl genrsa -out serverkey.pem 2048
openssl req -new -key serverkey.pem -out server.csr
openssl x509 -req -in server.csr -CA root.crt -CAkey rootkey.pem -CAcreateserial -days 3650-out server.crt
4)由key生成keystore,crt生成truststore(针对服务端,客户端的类似,在c++和java通信时需要用到)
openssl pkcs12 -export -in server.crt -inkey serverkey.pem -out server.pkcs12 打包服务器端资料为pkcs12格式(server.pkcs12 )。需要输入密码,请记住。
keytool -importkeystore -srckeystore server.pkcs12 -destkeystore server.jks -srcstoretype pkcs12 生成服务器端keystore(server.jks)。使用keytool的importkeystore指令。pkcs12转jks。需要pkcs12密码和jks密码。
keytool -importcert -alias ca -file root.crt -keystore servertrust.jks 生成Server端的对外KeyStore。先把根证书放到里面。
keytool -importcert -alias servercert -file server.crt -keystore servertrust.jks 把Server证书加到对外KeyStore里面。
测试
c++---c++成功
./server_normal 9091 keys/server.crt keys/server.key keys/ca.crt
./client.bak 172.16.22.22 9091 keys/client.crt keys/clientkey.pem keys/ca.crt
java---java成功(同自签名)
c++---java
1)c++服务端,java客户端 不成功
2)java服务端,c++客户端 成功,但是客户端socketFactory->loadTrustedCertificates(""ca.crt");
ssl创建加密通信代码:
服务端:
shared_ptr<TBufferedTransportFactory> transportFactory =
shared_ptr<TBufferedTransportFactory>(new TBufferedTransportFactory());
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
shared_ptr<TProcessor> processor(new CalculatorProcessor(handler));
shared_ptr<TSSLSocketFactory> socketFactory =
shared_ptr<TSSLSocketFactory>(new TSSLSocketFactory());
socketFactory->server(true);
socketFactory->authenticate(true);
socketFactory->loadCertificate("/home/study/openssl-ca/self_signed_normal/server.crt");
socketFactory->loadPrivateKey("/home/study/openssl-ca/self_signed_normal/server.key");
socketFactory->loadTrustedCertificates("/home/study/openssl-ca/self_signed_normal/client.crt");
socketFactory->ciphers("HIGH:!DSS:!aNULL@STRENGTH");
shared_ptr<TSSLServerSocket> socket(new TSSLServerSocket(port, socketFactory));
TThreadedServer server(processor,
socket,
transportFactory,
protocolFactory);
printf("Security server start \n");
server.serve();
客户端
shared_ptr <TSSLSocketFactory> socketFactory = shared_ptr<TSSLSocketFactory>(new TSSLSocketFactory());
socketFactory->authenticate(true);
socketFactory->loadCertificate("/home/study/openssl-ca/self_signed_normal/client.crt");
socketFactory->loadPrivateKey("/home/study/openssl-ca/self_signed_normal/client-key.pem");
socketFactory->loadTrustedCertificates("/home/study/openssl-ca/self_signed_normal/server.crt");
// socketFactory->ciphers("HIGH:!DSS:!aNULL@STRENGTH");
shared_ptr <TSSLSocket>socket = socketFactory->createSocket("localhost", 9091);
shared_ptr<TBufferedTransport> transport(new TBufferedTransport(socket));
shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
CalculatorClient client(protocol);
thrift ssl 证书整理的更多相关文章
- [整理]HTTPS和SSL证书
在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: • https:在http(超 ...
- StartCom 申请 SSL 证书及 Nginx HTTPS 支持配置全攻略
来源:https://www.williamyao.com/index.php/archives/1397/ 前言 最近收到 StartCom 的邮件,数字证书即将过期,想到去年在 StartSSL ...
- Apache环境服务器配置Let's Encrypt免费SSL证书及自动续期方法
如今越来越多的网站开始使用SSL证书,实现HTTPS网址形式,如果我们是英文网站更需要用到这样格式的HTTPS网址,因为根据谷歌搜索结果提示到如果用到SSL证书的在同等条件下排名结果是有靠前可能的.我 ...
- 阿里云 Ubuntu16.04 apache2 ssl证书下载与安装(必须有域名)
阿里云申请免费SSL证书并下载(包含xxx.key|xxx._root_bundle.crt|xxx._public.crt三个文件) 用https是自己的网站收到保护,不易被攻克,所以保护自己的网站 ...
- Linux+Apache下如何安装SSL证书
最近很多站长在问linux系统平台下如何安装SSL证书?Linux+Apache下如何安装SSL证书?本文整理了关于Linux+Apache下如何安装SSL证书的相关教程供大家参考,更多SSL证书安装 ...
- 阿里云Ubuntu下tomcat8.5配置SSL证书
环境 阿里云ubuntu(18.04)服务器 阿里云申请的域名 Tomcat8.5.7 jdk1.8 免费型SSL证书 SSL证书申请 登录阿里云的官网,登录后在菜单中选择SSL证书(应用安全) 进入 ...
- SSL证书基础知识
公司要为一个英国的客户提供由HTTP升级到HTTPS的服务,于是接触查询并学习了相关的SSL证书方面的内容,并整理了一翻. I.SSL证书说明 SSL 证书按大类一般可分为 DV SSL .OV SS ...
- tomcat 添加 ssl 证书
1. 将证书提供方给的证书(server.crt)及密钥文件(server.key)上传到服务器 tomcat 的 conf 目录 2. 在tomcat conf 目录下执行如下命令 (1) 生成P1 ...
- 【原创】免费申请SSL证书【用于HTTPS,即是把网站从HTTP改为HTTPS,加密传输数据,保护敏感数据】
今天公司有个网站需要改用https访问,所以就用到SSL证书.由于沃通(以前我是在这里申请的)暂停了免费的SSL证书之后,其网站推荐了新的一个网站来申请证书,所以,今天因为刚好又要申请一个证书,所以, ...
随机推荐
- 高性能缓存系统Redis安装与使用
在互联网后台架构中,需要应付高并发访问数据库,很多时候都会在数据库上层增加一个缓存服务器来保存经常读写的数据以减少数据库压力,可以使用LVS.Memcached或Redis,Memcached和Red ...
- C++ 关键字浅谈
这里有一个游戏:要求写一个符合C++标准的程序,包含至少十个连续而且不同的关键字.连续是指不能被标识符.运算符.标点符号分割.注意这里的“不同”要求,别想用 int main() { return s ...
- 【Java远程debug】
转自 http://blog.csdn.net/hongchangfirst/article/details/44191925 一.远程debug原理 Java远程调试的原理是两个JVM之间通过deb ...
- UWP学习记录7-设计和UI之控件和模式4
UWP学习记录7-设计和UI之控件和模式4 1.翻转视图 使用翻转视图浏览集合中的图像或其他项目(例如相册中的照片或产品详细信息页中的项目),一次显示一个项目. 对于触摸设备,轻扫某个项将在整个集合中 ...
- linux安装jdk(非rpm命令)
首先查看当前linux上安装的jdk版本: java -version 复制build 后面的jdk信息 卸载: rpm -e java-1.6.0_22-fcs 或者 yum -y remove j ...
- Ubuntu菜鸟入门(九)—— 支付宝支付控件安装
一.下载 使用支付宝的时候会提示下载 二.安装 1.打开到下载目录 2.使用命令 tar -zxvf aliedit.tar.gz ./aliedit.sh
- Android 延时执行任务的三种简单方法
开启一个新的线程 new Thread() { @Override public void run() { try { Thread.sleep(2000); } catch (Interrupted ...
- 嵌入式Linux学习入门:控制LED灯
记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...
- 在Javascript中onclick()方法应用
<html> < head> < script type="text/javascript"> function onclick1(){ ale ...
- jQuery 遍历函数
转载http://www.cnblogs.com/tylerdonet/archive/2013/04/05/3000618.html jQuery 遍历函数包括了用于筛选.查找和串联元素的方法. 函 ...