如何用C++实现支持HTTPS的RESTful WebServer

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用C++实现支持HTTPS的RESTful WebServer相关的知识,希望对你有一定的参考价值。

参考技术A webservice在企业应用中常常被用作不同系统之间的接口方式。但是如果没有任何安全机制的话,显然是难以委以重任的。比较直接的webservice加密方式就是使用HTTPS方式(SSL证书加密)加密连接,并且只允许持有信任证书的客户端连接,即SSL双向认证。这样就保证了连接来源的可信度以及数据在传输过程中没有被窃取或篡改。通过HTTPS加密方式访问webservice具体方法如下:【准备工作】(1)检查JDK的环境变量是否正确。本文使用JDK1.6(2)准备web服务器,这里选用TOMCAT6.0(3)准备webservice服务端和客户端。【生成证书】这里用到的文件,这里存放在D:/SSL/文件夹内,其中D:/SSL/server/内的文件是要交给服务器用的,D:/SSL/client/内的文件是要交给客户端用的。1生成服务端证书开始-运行-CMD-在dos窗口执行下执行命令:keytool-genkey-v-aliastomcat-keyalgRSA-keystoreD:/SSL/server/tomcat.keystore-dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN"-validity3650-storepasszljzlj-keypasszljzlj说明:keytool是JDK提供的证书生成工具,所有参数的用法参见keytool–help-genkey创建新证书-v详细信息-aliastomcat以”tomcat”作为该证书的别名。这里可以根据需要修改-keyalgRSA指定算法-keystoreD:/SSL/server/tomcat.keystore保存路径及文件名-dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN"证书发行者身份,这里的CN要与发布后的访问域名一致。但由于这里是自签证书,如果在浏览器访问,仍然会有警告提示。真正场景中建议申请CA机构(wosign)签发的SSL证书更安全。-validity3650证书有效期,单位为天-storepasszljzlj证书的存取密码-keypasszljzlj证书的私钥2生成客户端证书执行命令:keytool‐genkey‐v‐aliasclient‐keyalgRSA‐storetypePKCS12‐keystoreD:/SSL/client/client.p12‐dname"CN=client,OU=zlj,O=zlj,L=bj,ST=bj,C=CN"‐validity3650‐storepassclient‐keypassclient说明:参数说明同上。这里的-dname证书发行者身份可以和前面不同,到目前为止,这2个证书可以没有任何关系。下面要做的工作才是建立2者之间的信任关系。3导出客户端证书执行命令:keytool‐export‐aliasclient‐keystoreD:/SSL/client/client.p12‐storetypePKCS12‐storepassclient‐rfc‐fileD:/SSL/client/client.cer说明:-export执行导出-file导出文件的文件路径4把客户端证书加入服务端证书信任列表执行命令:keytool‐import‐aliasclient‐v‐fileD:/SSL/client/client.cer‐keystoreD:/SSL/server/tomcat.keystore‐storepasszljzl说明:参数说明同前。这里提供的密码是服务端证书的存取密码。5导出服务端证书执行命令:keytool-export-aliastomcat-keystoreD:/SSL/server/tomcat.keystore-storepasszljzlj-rfc-fileD:/SSL/server/tomcat.cer说明:把服务端证书导出。这里提供的密码也是服务端证书的密码。6生成客户端信任列表执行命令:keytool-import-fileD:/SSL/server/tomcat.cer-storepasszljzlj-keystoreD:/SSL/client/client.truststore-aliastomcat–noprompt说明:让客户端信任服务端证书【配置服务端为只允许HTTPS连接】1配置Tomcat目录下的/conf/server.xmlXml代码:说明:在server.xml里面这段内容本来是被注释掉的,如果想使用https的默认端口443,请修改这里的port参数。其中的clientAuth="true"指定了双向证书认证。2配置服务端项目web.xml在之后增加Xml代码:SSL/service/*/*-->SSLrequiredCONFIDENTIAL说明:这里限制了WEBservice服务地址的访问必须为https连接。要根据你的webservice服务地址配置。【修改客户端代码】在执行访问之前,增加Java代码:System.setProperty("javax.net.ssl.trustStore","D:/SSL/client/client.truststore");System.setProperty("javax.net.ssl.trustStorePassword","zljzlj");System.setProperty("javax.net.ssl.keyStoreType","PKCS12");System.setProperty("javax.net.ssl.keyStore","D:/SSL/client/client.p12");System.setProperty("javax.net.ssl.keyStorePassword","client");StringendPoint="ApplyFormService";通过设置参数来指定客户端连接时所使用的客户端证书,这里还可以采用修改JVM启动参数的的方式来执行,但出于不影响其他功能的考虑,这里采用System.setProperty的方式来设置这些参数,在使用结束后,可以还原这些参数配置。做为客户端的开发者,可以把拿到的证书文件后,只执行步骤3。

c++如何用链表计算阶乘

c++如何用链表计算阶乘采用链式存储结构实现

可以这么做,链表头放1代表1!,然后第二个就是第一个链表节点乘上2的结果也就是2!,依次类推,第n个节点为上一节点乘上n的结果也就是n! 参考技术A 有什么具体要求?

以上是关于如何用C++实现支持HTTPS的RESTful WebServer的主要内容,如果未能解决你的问题,请参考以下文章

Flutter如何用调用RestFul API

如何用rflask快速初始化Flask Restful项目

实战 | 如何用最快的速度学会Dlib人脸识别开发?

如何用 Dojo 组织异步代码?

如何用 CUB 库编译 C++?

如何用Python或C++编程实现在一组小数中找出最接近的两个数?