繁体   English   中英

启用内核TLS选项时,setsockopt失败

[英]setsockopt fails while kernel TLS option enabling

我正在学习有关内核5.3版本(Fedora 30和31)上的内核TLS的信息,但是即使启用了ULP也无法解决:

//  tls.c 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

#include <sys/types.h>     
#include <sys/socket.h>
#include <linux/tls.h>
#include <netinet/ip.h> 
#include <netinet/tcp.h>

int main() {
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == -1) {
        perror("socket creation");
        exit (EXIT_FAILURE);
    }

    if (setsockopt(sock, SOL_TCP, TCP_ULP, "tls", sizeof("tls")) == -1 )   {
        perror("tls init");
        exit (EXIT_FAILURE);
    }

    close (sock);
    return EXIT_SUCCESS;
}

然后:

$ cat /proc/sys/net/ipv4/tcp_available_ulp
tls
$ gcc tls.c -O0 -g
$ lsmod | grep tls
$ ./a.out 
tls init: No such file or directory

$ lsmod | grep tls
$ sudo ./a.out 
tls init: Unknown error 524

$ lsmod | grep tls
tls                    57344  0
$ ./a.out 
tls init: Unknown error 524
$ 

我不知道我哪里错了。 内核TLS文档中看起来是如此简单:

创建TLS连接

首先创建一个新的TCP套接字并设置TLS ULP。

 sock = socket(AF_INET, SOCK_STREAM, 0); setsockopt(sock, SOL_TCP, TCP_ULP, "tls", sizeof("tls"));

设置TLS ULP允许我们设置/获取TLS套接字选项。 当前,内核中仅处理对称加密。 TLS握手完成后,我们拥有了将数据路径移至内核所需的所有参数。 有一个单独的套接字选项,用于将发送和接收移入内核。

我不明白如何在内核TLS中启用,以及我做错了什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM