simple_ssl_server.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /*************************************************
  2. Copyright (c) 2020
  3. All rights reserved.
  4. File name: simple_ssl_server.c
  5. Description:
  6. History:
  7. 1. Version:
  8. Date: 2020-12-06
  9. Author: WKJay
  10. Modify:
  11. *************************************************/
  12. #include <rtthread.h>
  13. #include <stdio.h>
  14. #include "netserver.h"
  15. const char *server_cert_buffer =
  16. "-----BEGIN CERTIFICATE-----\r\n"
  17. "MIIDjTCCAnUCFCx0tlN5M0jcBAGjCMKf2DAS0hZKMA0GCSqGSIb3DQEBCwUAMIGB\r\n"
  18. "MQswCQYDVQQGEwJDTjENMAsGA1UECAwEV3VYaTENMAsGA1UEBwwEV3VYaTEOMAwG\r\n"
  19. "A1UECgwFV0tKYXkxDjAMBgNVBAsMBVdLSmF5MRQwEgYDVQQDDAsqLndramF5LmNv\r\n"
  20. "bTEeMBwGCSqGSIb3DQEJARYPdW5yZWFsQHRlc3QuY29tMCAXDTIyMDcxMTA3NTcz\r\n"
  21. "MloYDzIxMjIwNjE3MDc1NzMyWjCBgTELMAkGA1UEBhMCQ04xDTALBgNVBAgMBFd1\r\n"
  22. "WGkxDTALBgNVBAcMBFd1WGkxDjAMBgNVBAoMBVdLSmF5MQ4wDAYDVQQLDAVXS0ph\r\n"
  23. "eTEUMBIGA1UEAwwLKi53a2pheS5jb20xHjAcBgkqhkiG9w0BCQEWD3VucmVhbEB0\r\n"
  24. "ZXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL4KttV1Pz1T\r\n"
  25. "RTADsypnT9Gx/thb4C28900F9cFSmitHRLeWgZ/lEshZl08rXouHFYB8Pq6NBHeP\r\n"
  26. "akuv6M3kp227QcBHEIvwVbIBSfSJEMu1MgPd2AbwlQ2ZaUqIgtNQ/BzwqOYgaOaQ\r\n"
  27. "LvmjcIiRdLpaXWlrfZN/YMcLkovAAvglck+KppElbbtz78T/e1HJlYQNTM7AzpaT\r\n"
  28. "641lAZpoxR7GcyRnW4Te3nAsRELYcKVMoLC256OviuZCCPFd+ec1awa6Cqh8f9ww\r\n"
  29. "zmSj5y5inF8uUPIitGODLDOwn4gfLDIXEH5gf67u8tAtnllzhclJ/OeYdZoeVDzM\r\n"
  30. "lEWwTMSQRmcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAFp8yP5XbR32BdQVraLsb\r\n"
  31. "gidEzuu3B8BMwlrWb64HiNbiozKFHC6uPsb/E0l8BedMaqQC3FseGAmIlTWX1KWy\r\n"
  32. "s6lVFtZa663xOG0EW8opWzLKSGgakgf6NtSNQBZPwXrc7nLxuVH06raYaM9OAcXV\r\n"
  33. "u4Nk0sGAQGc63khRHfuV+zfXqNHwxczM6sW/DvAj01UW5Ea6K7gmTW0h/fvbXoC0\r\n"
  34. "WsidBAEPdxExMPuUojQcHAtw96ojMnDliwDX5hKd+OJK3cLXKQa+8UUfiTPEexVl\r\n"
  35. "L4dteJUKD1u6ReftQvDW+2YUynVzkj8hmyv1JpTXK+9Q0xfmxVl22WgE+qkZHL+7\r\n"
  36. "TQ==\r\n"
  37. "-----END CERTIFICATE-----\r\n";
  38. const char *server_key_buffer =
  39. "-----BEGIN RSA PRIVATE KEY-----\r\n"
  40. "MIIEogIBAAKCAQEAvgq21XU/PVNFMAOzKmdP0bH+2FvgLbz3TQX1wVKaK0dEt5aB\r\n"
  41. "n+USyFmXTytei4cVgHw+ro0Ed49qS6/ozeSnbbtBwEcQi/BVsgFJ9IkQy7UyA93Y\r\n"
  42. "BvCVDZlpSoiC01D8HPCo5iBo5pAu+aNwiJF0ulpdaWt9k39gxwuSi8AC+CVyT4qm\r\n"
  43. "kSVtu3PvxP97UcmVhA1MzsDOlpPrjWUBmmjFHsZzJGdbhN7ecCxEQthwpUygsLbn\r\n"
  44. "o6+K5kII8V355zVrBroKqHx/3DDOZKPnLmKcXy5Q8iK0Y4MsM7CfiB8sMhcQfmB/\r\n"
  45. "ru7y0C2eWXOFyUn855h1mh5UPMyURbBMxJBGZwIDAQABAoIBAGc7SrYJSqD1as/6\r\n"
  46. "MokGNcWi+txsjApMa8nbQvQQ+s4nmJxhlWhV9y39/MN0u5bvei6hTytiTtrjfMpA\r\n"
  47. "dCXj308sOTtJXyOlGefn61R6YDVH6DNRftfGODF69EcYgHhptYnC8PyQ/mrAR8Qz\r\n"
  48. "lB2bZd0U2Uk6qqxEtT1qe+COHQ7N16ChZ5YYwAebFnByPhPCq78QINHQoDQDknCT\r\n"
  49. "Xes2LfmevH0grirD2MfIbbOBLyznwsLlaQwYOrNrzYKLDcO5NgBYUHzVotqiMoA3\r\n"
  50. "vzU4YksGnjcV0euNGLgK5MSBxOpdNmcAJ5wBtMWGNElRjY1ogWPy92wk383vW9md\r\n"
  51. "kWvbMwECgYEA9TNW2HGnQ+m3u0rmuu+h6kOegUZzuR1YLO3giRVCXYlEwIZ1Ljxn\r\n"
  52. "NaW/7H2LoG9lqXVCoFdjJuqlFzEcPufEwGFgRRcLjusgxIe7B4xHbp/Ymsoucigi\r\n"
  53. "7S7LzylAV+iecdk1fghvh6tfKdA/W/q0z0SElRFsqSs3DCm9hKc21A8CgYEAxml0\r\n"
  54. "hdBU7d9Yz31e8kZOVNT//y290w2Dfkbh6D/4xrymPd1cwLPqWEhmqmkIc1+7l4s+\r\n"
  55. "k5HIfMBP9w40CVwgDq0SUN04GwzeszVQbaJlkOa8KP+ny/G/QHpXFnGxUHXeF//I\r\n"
  56. "/RNjkcArHrUc/NPU7ZODg84ZemE1gSQqKM8isCkCgYB3UTM6ghvF1W5dynX6k290\r\n"
  57. "AtGX0MOxWdE1k8/GhTzVLV3yXbuZ8zS6C10YZINUX8DVtETmp3+NSXNqlLBNABVj\r\n"
  58. "FD93f15Vfp9kYzQk2SNNdqU9tZLiZBuS1UnCFi3EWWL4vZzlJo+3MjJNs5ORW68u\r\n"
  59. "iQYHUAJTU78mwQ0DByeMCwKBgAFA3UmTHVY7WPZGlnj1VL1Ycx2Ljm1s4m3DyN2M\r\n"
  60. "ueeXfX1ajqFxAYP5QRzGeRUxf5/fc0+/VgLjvB2Va2K7wEAXe8wi+Z3CIQ4EwjNP\r\n"
  61. "GVEnA/1GUCsLpeekXjR4F2SoufRw2zYuDyz2h88z2bEHLYsqqWQFw0dwocPlFJcZ\r\n"
  62. "Z+CxAoGAOyCWhXLxcl3eOtOCsIyTLaKl3WgFaZ+DdF7e3zAqMB/W+ucCHeML0o3Q\r\n"
  63. "NocuRj/ivqEckG6Wd3pfUXPHEGUVlBKeEPQQK8akO4r0VOPH2IrKbxBpelq7vXKk\r\n"
  64. "ZqDVjvvNOutjNeky4HB6r0owCNcHPqcpIJfr9+FhChtVUX51WJA=\r\n"
  65. "-----END RSA PRIVATE KEY-----\r\n";
  66. static int netserver_readable_cb(ns_session_t *ns, void *data, int sz) {
  67. int ret = 0;
  68. ret = netserver_write(ns, data, sz);
  69. return ret;
  70. }
  71. int ssl_server_init(void) {
  72. netserver_opt_t opts;
  73. netserver_mgr_t *mgr = NULL;
  74. rt_memset(&opts, 0, sizeof(opts));
  75. opts.max_conns = 3;
  76. opts.listen_port = 3334;
  77. /* disconnect connection after one minute no data input */
  78. opts.session_timeout = 60 * 1000;
  79. /* default stack size may not be enough */
  80. opts.thread_attrs.stack_size = 6 * 1024;
  81. /* load certificates */
  82. opts.server_cert_buffer = server_cert_buffer;
  83. opts.server_key_buffer = server_key_buffer;
  84. /* register callback function */
  85. opts.callback.data_readable_cb = netserver_readable_cb;
  86. /* create netserver manager object */
  87. mgr = netserver_create(&opts, NS_USE_SSL);
  88. if (mgr == NULL) {
  89. printf("create simple ssl server manager failed.\r\n");
  90. return -1;
  91. }
  92. /* start netserver */
  93. if (netserver_start(mgr) == 0) {
  94. printf("start simple ssl server on port %d.\r\n", opts.listen_port);
  95. return 0;
  96. } else {
  97. printf("start simple ssl server error.\r\n");
  98. return -1;
  99. }
  100. }
  101. MSH_CMD_EXPORT(ssl_server_init, ssl server init);