[英]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.