You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenSSL的程序被360报创建进程,是误报还是特性?

关于OpenSSL客户端程序触发360“创建进程”提示的问题

我为学习OpenSSL库(此前未使用过)从网上复制了一份示例代码,使用cygwin64编译为client.exe后运行,弹出360提示窗口显示:

Risky program behavior: Create a process

请问这是360的误报,还是Windows环境下的OpenSSL库会创建进程?

示例代码

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <unistd.h>  
#include <sys/types.h>   
#include <sys/socket.h>  
#include <netinet/in.h>  
#include <arpa/inet.h>  
#include <openssl/ssl.h>  
#include <openssl/err.h>  
#define PORT 8000
#define SERVER_IP "127.0.0.1"
#define SERVER_KEY "./serverkey.pem"
#define SERVER_CERT "./servercert.pem"
#define CA_CERT "./cacert.pem"

// 初始化OpenSSL库             
void init_openssl() {  
    SSL_load_error_strings();  
    OpenSSL_add_all_algorithms();  
    SSL_library_init();  
}  
//创建原始套接字
int create_connect_fd()
{
    struct sockaddr_in serv_addr;
    int client_fd;
    
    // 创建socket
    if ((client_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        printf("\n Socket creation error \n");
        return -1;
    }
    
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(PORT);
    
    // 使用inet_pton转换IP字符串为网络字节序
    if(inet_pton(AF_INET, SERVER_IP, &serv_addr.sin_addr)<=0)
    {
        printf("\nInvalid address/ Address not supported \n");
        return -1;
    }
    
    // 连接服务器
    if (connect(client_fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
    {
        printf("\nConnection Failed \n");
        return -1;
    }
    return client_fd;
}
//创建ssl上下文
SSL_CTX* create_ssl_ctx() {  
    const SSL_METHOD *method;  
    SSL_CTX *ctx;  
  
    // method = TLSv1_2_client_method();  
    method = TLS_client_method();
    ctx = SSL_CTX_new(method);  
    if (!ctx) {  
        printf("Unable to create SSL context");  
        ERR_print_errors_fp(stderr);  
        return NULL;
    } 
        // 加载服务器证书和私钥  
    if (SSL_CTX_use_certificate_file(ctx, SERVER_CERT, SSL_FILETYPE_PEM) <= 0) {  
        ERR_print_errors_fp(stderr); 
        printf("load server cert failed\n"); 
        return NULL;  
    }  
  
    if (SSL_CTX_use_PrivateKey_file(ctx, SERVER_KEY, SSL_FILETYPE_PEM) <= 0) {  
        ERR_print_errors_fp(stderr);  
        printf("load server key failed\n");
        return NULL;
    }  
  
    // 检查私钥和证书是否匹配  
    if (!SSL_CTX_check_private_key(ctx)) {  
        printf("cert and key mismatch\n");
        return NULL;
    }   
    //加载CA证书
    if (!SSL_CTX_load_verify_locations(ctx, CA_CERT, NULL)) {  
        printf("load ca cert failed\n");
        return NULL; 
    }  
      //必须验证服务端证书,不设置则不验证
    SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL);  
    return ctx;  
}  


int main()
{
    SSL_CTX *ctx;
    SSL *ssl;
    int client_fd,send_len;
    char buf[102400] = {0};

    /* 初始化SSL库 */
    init_openssl();

    /* 创建SSL_CTX结构体 */
    ctx = create_ssl_ctx();  
    if(ctx == NULL)
    {
        printf("create ssl ctx failed\n");
        return -1;
    }
    /* TCP协议连接到服务器 */
    client_fd = create_connect_fd(); 
    if(client_fd < 0)
    {
        printf("create client fd failed\n");
        return -1;
    }
    //创建ssl对象
    ssl = SSL_new(ctx);
    SSL_set_fd(ssl, client_fd);
    //ssl握手
    if (SSL_connect(ssl) == -1) {
        ERR_print_errors_fp(stderr);
        return -1;
    }

    printf("Connected with %s encryption\n", SSL_get_cipher(ssl));

    /* 发送数据 */
    char buf_send[1024];
    while (1)
    {
        fgets(buf_send,sizeof(buf_send),stdin);
        send_len=SSL_write(ssl, buf_send, strlen(buf_send));
        // send_len = SSL_write(ssl, buf, sizeof(buf));
        if(send_len < 0)
        {
            printf("SSL_write failed\n");
        }
        else
        {
            printf("write len:%d\n", send_len);
        }
    }
    SSL_shutdown(ssl);
    SSL_free(ssl);
    close(client_fd);
    SSL_CTX_free(ctx);
    return 0;
}  

问题解答

这大概率是360的误报。

首先看你提供的代码,里面完全没有主动创建进程的逻辑(比如Windows的CreateProcess、类Unix的fork这类系统调用),核心功能就是建立TCP连接、完成SSL握手,然后循环发送用户输入的内容,没有任何可疑行为。

至于Windows环境下的OpenSSL库,正常的TLS客户端流程不会主动创建额外进程。不过有个可能:你用Cygwin编译的程序,Cygwin本身在启动时可能会加载一些底层支持的辅助进程(比如依赖cygwin1.dll的相关操作),360可能把这种Cygwin程序的启动行为误判成“创建进程”的风险操作。

另外也可以排查下编译时是否链接了非预期的库,但从代码来看不存在这类问题,所以基本可以确定是安全软件的误报。

内容的提问来源于stack exchange,提问作者ho tian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:29:52