1、任何ICE的程序如果试图使用SSL的安全连接,那么对应的应用必须加载SSL插件
2、配置程序在启动过程中加载SSL插件:
   Ice.Plugin.IceSSL=IceSSL:createIceSSL
   IceSSL.DefaultDir=/opt/certs
   IceSSL.CertFile=pubkey.pem
   IceSSL.KeyFile=privkey.pem
   IceSSL.CertAuthFile=ca.pem
   IceSSL.Password=password
   Ice.Override.Secure=1
3、程序中获取ssl插件对象:
   Ice::PluginManagerPtr pluginMgr = communicator->getPluginManager();
   Ice::PluginPtr plugin = pluginMgr->getPlugin("IceSSL");
   IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);   
4、设置个性化的ssl校验机制:
   class Verifier : public IceSSL::CertificateVerifier
   {
   public:
       bool verify(const IceSSL::NativeConnectionInfo& info)
       {
          if (!info.nativeCerts.empty())
          {
              string dn = info.nativeCerts[0].getIssuerDN();
              transform(dn.begin(), dn.end(), dn.begin(), ::tolower);
              if (dn.find("zeroc") != string::npos)
              {
                 return true;
              }
          }
          return false;
        }
    };
   sslPlugin->setCertificateVerifier(new Verifier);
5、在NativeConnectionInfo中包含了对应的SSL证书信息,其结构如下:
   class NativeConnectionInfo : public ConnectionInfo 
   {
   public:
       std::vector<CertificatePtr> nativeCerts;
   };   
   
   class Certificate : public IceUtil::Shared
   {
   public:
      Certificate(X509*);
      static CertificatePtr load(const string&);
      static CertificatePtr decode(const string&);
      bool operator==(const Certificate&) const;
      bool operator!=(const Certificate&) const;
      PublicKeyPtr getPublicKey() const;
      bool verify(const PublicKeyPtr&) const;
      string encode() const;
      bool checkValidity() const;
      bool checkValidity(const IceUtil::Time&) const;
      IceUtil::Time getNotAfter() const;
      IceUtil::Time getNotBefore() const;
      string getSerialNumber() const;
      DistinguishedName getIssuerDN() const;
      vector<pair<int, string> > getIssuerAlternativeNames();
      DistinguishedName getSubjectDN() const;
      vector<pair<int, string> > getSubjectAlternativeNames();
      int getVersion() const;
      string toString() const;
      X509* getCert() const;
   };
6、动态密码的设置(设置属性Ice.InitPlugins=0)
   class PasswordPrompt : public IceUtil::Shared
   {
   public:
       virtual std::string getPassword() = 0;
   };
   
   Ice::PluginManagerPtr pluginMgr = communicator->getPluginManager();
   Ice::PluginPtr plugin = pluginMgr->getPlugin("IceSSL");
   IceSSL::PluginPtr sslPlugin = IceSSL::PluginPtr::dynamicCast(plugin);
   sslPlugin->setPasswordPrompt(new Prompt);
   pluginMgr->initializePlugins();   
7、证书的申请创建(注意设置环境变量ICE_CA_HOME)
   python iceca init [--no-password] [--overwrite]
   python iceca request [--overwrite] [--no-password] file common-name [email]
   python iceca sign [--overwrite] --in <req> --out <cert> [--ip <ip> --dns <dns>]

ICESSL使用备忘相关推荐

  1. vim的一些快捷键,备忘

    vim的一些快捷键,备忘 快捷键                                            作用 ctrl+g                                ...

  2. 资源 | AI、神经网络、机器学习、深度学习以及大数据学习备忘单

    向AI转型的程序员都关注了这个号☝☝☝ 以下是关于神经网络.机器学习.深度学习以及大数据学习的备忘单,其中部分内容和此前发布的<资源 | 值得收藏的 27 个机器学习的小抄>有所重复,大家 ...

  3. 机器学习项目的备忘清单!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Harshit Tyagi,编译:机器之心 机器学习项目中含有众多 ...

  4. 备忘:C语言void *

    由于研究一段代码的时候,看到了 void *.故此进行了学习. 看了 http://www.doc88.com/p-894907672962.html  的说明,感觉写得太好了,已无话可说. 故此备忘 ...

  5. [译] Kotlin 标准方法备忘

    原文地址:Kotlin Standard Functions cheat-sheet 原文作者:Jose Alcérreca 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/go ...

  6. Nancy之结合TinyFox调试备忘

    原文:Nancy之结合TinyFox调试备忘 最近把一个小项目的数据库换成MongoDB,同时用了MongoRepository 这个开源组件来对数据进行操作. 通过NuGet安装之后,它会自动在we ...

  7. CSP浏览器安全策略备忘

    挺久之前过了一遍CSP的安全策略,很多人把它喻为XSS攻击的终结者,因为这种策略不再像传统只靠各种正则和特征匹配来识别跨站攻击Payload,而是直接从协议层把一些存在安全隐患的用法默认给干掉了,把同 ...

  8. Cheat—— 给Linux初学者和管理员一个终极命令行备忘单

    当你不确定你所运行的命令,尤其是那些使用了许多选项的复杂命令时,你会怎么做?在这种情况下,我们使用man pages来获取帮助.还有一些其它的选择可能包括像'help','whereis'和'what ...

  9. 简单备忘一下Linux下的wget和curl如何使用http proxy

    简单备忘一下Linux下的wget和curl如何使用http proxy wget -e "http_proxy=porxyhost:port" www.baidu.com cur ...

最新文章

  1. 站立会议 ---01
  2. 听说你想从事中间件开发?
  3. Python基础教程:括号()[]{}详解
  4. zabbix 安装_Zabbix的WEB安装与配置
  5. 工厂模式 + 反射 ?= 灵活多变的数据库
  6. 积累命令、用户、正则表达式
  7. 【C/C++】与const有关的指针类型赋值
  8. FormData对象提交表单及上传图片/文件
  9. 三屏版知识竞赛类软件的开发需求分析及技术构思
  10. 4个空格 tab vetur_Python成为专业人士笔记–程序行空白及tab缩进的作用
  11. [Erlang 0017]Erlang/OTP基础模块 proc_lib
  12. 怎么修改PDF文件内容
  13. 2016年计算机考研大纲,2016考研计算机大纲解析
  14. 分类流控qdisc之htb
  15. 自考2018版《管理经济学》第一章导论——思维导图
  16. Eclipse SVN:E200030:There are unfinished transactions detected
  17. Error: docker-ce conflicts with 2:docker-1.13.1-209.git7d71120.el7.centos.x86_64
  18. 波特率、数据传输速率和带宽的关系(转)
  19. 罗永浩将举办“老人与海”黑科技发布会;京东正式宣告:全面向技术转型;英特尔因CPU短缺向PC厂商道歉 | EA周报...
  20. 【量化】量化交易入门系列2:经典的量化交易策略(上)

热门文章

  1. 【Spark ML】第 1 章:机器学习简介
  2. 【书摘】The Joshua tree epiphany
  3. VIA图像标注系统汉化版
  4. 利用手动Ghost工具手动安装系统(U盘)
  5. 《Linux命令行与shell脚本编程大全》第十三章 学习笔记
  6. 【Solidity】8. 杂项 - 深入理解Solidity
  7. UI设计:使用PS绘制拟物化图标
  8. 每周分享第 21 期
  9. javaSE--基础六(idea.debug,进制转换,二维数组)
  10. matlab app设计步骤_1.1数学建模与MATLAB–MATLAB入门