我创建了一个client-rest-api,它调用了server-rest-api(单向调用).我的client-rest-api使用server-rest-api颁发的证书.但是我的client-rest-api从未向server-rest-api颁发任何证书.它是单向ssl还是双向ssl?
事件虽然它只是从客户端到服务器的单向调用,但我认为它的双向ssl,因为这里server-rest-api验证客户端是否拥有服务器发出的适当证书?
我需要将服务器证书下载为 DER 文件。我正在使用Python。我可以使用此脚本连接到服务器,但我需要将证书本地下载到我的硬盘中,以便我可以在下一阶段解析它。
import socket, ssl
import OpenSSL
hostname='www.google.com'
port=443
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = context.wrap_socket(s, server_hostname=hostname)
ssl_sock.connect((hostname, port))
ssl_sock.close()
print("ssl connection Done")
cert = ssl.get_server_certificate((hostname, port))
# OpenSSL
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
Run Code Online (Sandbox Code Playgroud) 我在本地主机上使用 nginx 的自签名证书。我正在使用 OpenSSL 最新版本来执行此操作。这是配置文件。
localhost.conf
[req]
default_bits = 2048
default_keyfile = localhost.key
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_ca
[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Rochester
localityName = Locality Name (eg, city)
localityName_default = Rochester
organizationName = Organization Name (eg, company)
organizationName_default = localhost
organizationalUnitName = organizationalunit
organizationalUnitName_default = Development
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 perl 通过服务器 Office 365 发送邮件
该操作 10 次中有 8 次成功(即随机在 20% 的情况下失败)。
use Net::SMTPS;
my $mailer = Net::SMTPS->new("smtp.office365.com",
Port => "587",
doSSL => "starttls",
SSL_version => "TLSv1",
Debug => 4
);
...
Run Code Online (Sandbox Code Playgroud)
$mailer 返回 undef ;
下面是日志:
Net::SMTPS>>> Net::SMTPS(0.10)
Net::SMTPS>>> IO::Socket::IP(0.41)
Net::SMTPS>>> IO::Socket(1.48)
Net::SMTPS>>> IO::Handle(1.48)
Net::SMTPS>>> Exporter(5.73)
Net::SMTPS>>> Net::SMTP(3.13)
Net::SMTPS>>> Net::Cmd(3.13)
Net::SMTPS=GLOB(0x30816b0)<<< 220 DU2PR04CA0355.outlook.office365.com Microsoft ESMTP MAIL Service ready at Fri, 22 Oct 2021 09:15:28 +0000
Net::SMTPS=GLOB(0x30816b0)>>> EHLO localhost.localdomain
Net::SMTPS=GLOB(0x30816b0)<<< 250-DU2PR04CA0355.outlook.office365.com Hello [54.77.44.87]
Net::SMTPS=GLOB(0x30816b0)<<< 250-SIZE 157286400
Net::SMTPS=GLOB(0x30816b0)<<< 250-PIPELINING
Net::SMTPS=GLOB(0x30816b0)<<< …
Run Code Online (Sandbox Code Playgroud) 我有一个数组,我想在其中插入一个新元素,将所有其他元素向右移动:
my @a = (2, 5, 4, 8, 1);
# insert 42 into position no. 2
Run Code Online (Sandbox Code Playgroud)
预期结果:
(2, 5, 42, 4, 8, 1);
Run Code Online (Sandbox Code Playgroud) 我有example.com的有效证书.如果用户访问我的网站http://example.com,他们会被重定向到https://example.com,一切都很好.如果他们访问https://example.com,一切都很好.如果他们甚至访问http://www.example.com,他们会被重定向到https://example.com,一切都很好.
但是,如果他们访问https ://www.example.com,Chrome会在我重定向之前触发其SSL警告,并告知用户不信任此网站.我在Safari或Firefox中没有这个问题.
这是我的nginx配置.我究竟做错了什么?
```
# Configuration for redirecting non-ssl to ssl;
server {
listen *:80;
listen [::]:80;
server_name example.com;
return 301 https://example.com$request_uri;
}
# Configuration for redirecting www to non-www;
server {
server_name www.example.com;
ssl_certificate ssl/ssl_cert.crt;
ssl_certificate_key ssl/ssl_key.key;
listen *:80;
listen *:443 ssl spdy;
listen [::]:80 ipv6only=on;
listen [::]:443 ssl spdy ipv6only=on;
return 301 https://example.com$request_uri;
}
server {
listen *:443 ssl spdy;
listen [::]:443 ssl spdy;
ssl_certificate ssl/ssl_cert.crt; …
Run Code Online (Sandbox Code Playgroud) 找到最新版本号的最可靠来源是什么?是github吗?
我应该带1.0.2k
?但后来1.1.0d
似乎它更新近(如果它遵循语义版本).这些字母究竟意味着什么?
注意:在我的例子中,这是使用nginx编译openssl版本.上次我选择(非常随机)版本1.0.2h,这似乎是当时的最新版本.
那么找到最新的openssl版本的过程是什么?
当发生 TLS 握手时,服务器发送他的 ServerHello 消息,他的数字证书。该数字证书由名为 A 的中间 CA 进行数字签名,CA A 也有一个由名为 root 的 CA 签名的证书,其证书是自签名的,从而形成一个证书链。然后客户端必须建立信任,验证服务器证书。要执行该验证,客户端必须验证整个链是否正确?客户端必须在信任库中拥有所有证书(A 和 Root),否则客户端会下载它们?
我在嵌入式设备上遇到了一个 mbedTLS 示例,在下载固件之前我看到了服务器证书验证(以 github.com 为例),但唯一编码的证书/密钥是 github 之一(CA 链,而不是 github 证书)本身)。
我的问题是:
我对答案有一个大致的了解,但我需要确定性。
问候,