我正在设计一个新的Azure环境的架构。我打算使用订阅来隔离 dev、stg 和 prd。
我发现需要在订阅之间导入/导出 Azure 通配符 SSL 证书。此后,自动续订是否会在所有订阅中起作用,还是仅在原始订阅中起作用?
或者,我可以按一个订阅下的资源组来隔离环境。Azure SSL 是否可以在资源组之间自动续订?
或者是否有其他技巧或方法可以在环境之间共享通配符证书?
我正在设计一个新的Azure环境的架构。我打算使用订阅来隔离 dev、stg 和 prd。
我发现需要在订阅之间导入/导出 Azure 通配符 SSL 证书。此后,自动续订是否会在所有订阅中起作用,还是仅在原始订阅中起作用?
或者,我可以按一个订阅下的资源组来隔离环境。Azure SSL 是否可以在资源组之间自动续订?
或者是否有其他技巧或方法可以在环境之间共享通配符证书?
我办公室的服务器由于 SSL 证书过期而目前无法访问。系统管理员要我给他们 CSR 文件和私钥。
我的问题是我可以向他们发送我 2 年前生成的 CSR 还是我必须生成新的 CSR?
私钥对他们重要吗?据我所知,私钥必须保密。
提前致谢。
来自 proxmox 的 Debian Bookworm 12.5 DRBD 和 ktls-utils 软件包。一直都很好,直到我启用了 tls。
ii drbd-dkms 9.2.8-2 all
ii drbd-reactor 1.4.0-1 amd64
ii drbd-utils 9.27.0-1 amd64
ii ktls-utils 0.10-6 amd64
在 3 个节点上安装了 drbd,全部同步,工作得很好。
r0 role:Primary
disk:UpToDate
slave role:Secondary
peer-disk:UpToDate
tiebreaker role:Secondary
peer-disk:UpToDate
{ tls yes; }
然后我在所有这些节点上添加了网络。
收到:
dmesg
[ 147.759827] drbd r0 slave: conn( Connecting -> NetworkFailure ) [disconnected]
[ 147.759848] drbd r0 slave: Terminating sender thread
[ 147.759853] drbd r0 slave: Starting sender thread (from drbd_r_r0 [755])
[ 147.771131] drbd r0 slave: Connection closed
[ 147.771135] drbd r0 slave: helper command: /sbin/drbdadm disconnected
[ 147.771587] drbd r0 slave: helper command: /sbin/drbdadm disconnected exit code 0
[ 147.771592] drbd r0 slave: conn( NetworkFailure -> Unconnected ) [disconnected]
[ 147.977813] drbd r0 tcp:tiebreaker: dtt_send_page: size=80 len=80 sent=-95
[ 147.977817] drbd r0 tiebreaker: conn( Connecting -> NetworkFailure ) [disconnected]
[ 147.977824] drbd r0 tiebreaker: Terminating sender thread
[ 147.977829] drbd r0 tiebreaker: Starting sender thread (from drbd_r_r0 [759])
[ 147.987330] drbd r0 tiebreaker: Connection closed
[ 147.987335] drbd r0 tiebreaker: helper command: /sbin/drbdadm disconnected
[ 147.987744] drbd r0 tiebreaker: helper command: /sbin/drbdadm disconnected exit code 0
[ 147.987749] drbd r0 tiebreaker: conn( NetworkFailure -> Unconnected ) [disconnected]
[ 148.783089] drbd r0 slave: conn( Unconnected -> Connecting ) [connecting]
ngrep -d any port 7788
interface: any
filter: ( port 7788 ) and (ip || ip6)
####
T 192.168.0.X:52605 -> 192.168.0.Y:7788 [AP] #4
....Wf4Q.(.....\.D....x:.0.Y.k 2[..... <SKIPPED MANY LINES>
#####
T 192.168.0.Y:52571 -> 192.168.0.X:7788 [AP] #9
<SKIPPED MANY LINES>
tcpdump port 7788
09:11:21.927899 IP 192.168.0.Z.39381 > 192.168.0.Y.7788: Flags [.], ack 2313, win 501, options [nop,nop,TS val 2232236805 ecr 466841460], length 0
journalctl -f -u tlshd
Apr 10 10:18:12 master tlshd[8385]: Handshake with slave ... was successful
Apr 10 10:18:12 master tlshd[8386]: Handshake with tiebreaker ... was successful
^^ fine on all nodes.
在详细节点上也是这样:
DBG<1>././lib/cache_mngt.c:302 nl_cache_mngt_unregister: Unregistered cache operations genl/family
我生成了如下证书 使用 DRBD 进行加密复制 - LINBIT https://linbit.com/blog/encrypted-replication-with-drbd/只是修复了 CN 以匹配主机名,还添加了 IP,以防万一(使用各种版本,没有运气)。证书是使用 openssl 实用程序在 macos 上生成的。
-addext "subjectAltName = DNS:$domain, IP:$ip" \
-addext "extendedKeyUsage = serverAuth, clientAuth" \
收到:
r0 role:Secondary
disk:UpToDate quorum:no
slave connection:Connecting
tiebreaker connection:NetworkFailure
r0 role:Secondary
disk:UpToDate quorum:no
slave connection:Unconnected
tiebreaker connection:Unconnected
我禁用了cram-hmac-alg、data-integrity-alg、shared-secret,以防万一只用“tls yes”保持网络部分干净,但没有运气。这是一个简单的资源配置,具有 3 个节点和连接网格 + tls yes。
有什么我忘记添加的东西才能把它们放在一起吗?我在本地虚拟环境中运行它,没有网络问题。配置有问题,我不知道是什么。
r0.res
resource r0 {
options {
auto-promote no;
on-suspended-primary-outdated force-secondary;
quorum majority;
on-no-quorum io-error;
quorum-minimum-redundancy 2;
}
device /dev/drbd0;
meta-disk internal;
disk /dev/sdb1;
protocol B;
startup {
wfc-timeout 15;
degr-wfc-timeout 60;
}
net {
tls yes;
}
on master {
address 192.168.0.X:7788;
node-id 0;
}
on slave {
address 192.168.0.Y:7788;
node-id 1;
}
on tiebreaker {
address 192.168.0.Z:7788;
node-id 2;
}
connection-mesh {
hosts master slave tiebreaker;
}
}
更多 tlshd 日志:
pr 11 09:37:19 master tlshd[1008]: Parsing a valid netlink message
Apr 11 09:37:19 master tlshd[1008]: No peer identities found
Apr 11 09:37:19 master tlshd[1008]: No certificates found
Apr 11 09:37:19 master tlshd[1008]: DBG<2> ././lib/msg.c:572 nlmsg_free: msg 0x5573416ff750: Freed
Apr 11 09:37:19 master tlshd[1008]: DBG<2> ././lib/msg.c:572 nlmsg_free: msg 0x5573416ff610: Freed
Apr 11 09:37:19 master tlshd[1008]: System config file: /etc/gnutls/config
Apr 11 09:37:19 master tlshd[1008]: Server x.509 truststore is /etc/tlshd.d/myCA.crt
Apr 11 09:37:19 master tlshd[1008]: System trust: Loaded 1 certificate(s).
Apr 11 09:37:19 master tlshd[1008]: Retrieved x.509 certificate from /etc/tlshd.d/master.crt
Apr 11 09:37:19 master tlshd[1008]: Retrieved private key from /etc/tlshd.d/master.key
Apr 11 09:37:19 master tlshd[1008]: gnutls(2): checking 13.02 (GNUTLS_AES_256_GCM_SHA384) for compatibility
Apr 11 09:37:19 master tlshd[1008]: gnutls(2): Selected (RSA) cert
Apr 11 09:37:19 master tlshd[1008]: gnutls(2): EXT[0x557341710040]: server generated SECP384R1 shared key
Apr 11 09:37:19 master tlshd[1009]: Server's trusted authorities:
Apr 11 09:37:19 master tlshd[1009]: [0]: CN=MyCN
Apr 11 09:37:19 master tlshd[1009]: The certificate is trusted.
Apr 11 09:37:19 master tlshd[1009]: The peer offered 1 certificate(s).
Apr 11 09:37:19 master tlshd[1009]: Session description: (TLS1.3)-(ECDHE-SECP384R1)-(RSA-PSS-RSAE-SHA384)-(AES-256-GCM)
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:277 __nlmsg_alloc: msg 0x5573416ff610: Allocated new message, maxlen=4096
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:517 nlmsg_put: msg 0x5573416ff610: Added netlink header type=16, flags=0, pid=0, seq=0
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:424 nlmsg_reserve: msg 0x5573416ff610: Reserved 4 (4) bytes, pad=4, nlmsg_len=20
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/genl/genl.c:357 genlmsg_put: msg 0x5573416ff610: Added generic netlink header cmd=3 version=1
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/attr.c:470 nla_reserve: msg 0x5573416ff610: attr <0x557341703164> 2: Reserved 16 (10) bytes at offset +4 nlmsg_len=36
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/attr.c:507 nla_put: msg 0x5573416ff610: attr <0x557341703164> 2: Wrote 10 bytes at offset +4
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:277 __nlmsg_alloc: msg 0x5573416ff750: Allocated new message, maxlen=164
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:572 nlmsg_free: msg 0x5573416ff750: Freed
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:277 __nlmsg_alloc: msg 0x55734170cac0: Allocated new message, maxlen=36
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:572 nlmsg_free: msg 0x55734170cac0: Freed
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:572 nlmsg_free: msg 0x5573416ff610: Freed
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:277 __nlmsg_alloc: msg 0x5573416ff610: Allocated new message, maxlen=4096
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:517 nlmsg_put: msg 0x5573416ff610: Added netlink header type=32, flags=0, pid=0, seq=0
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:424 nlmsg_reserve: msg 0x5573416ff610: Reserved 4 (4) bytes, pad=4, nlmsg_len=20
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/genl/genl.c:357 genlmsg_put: msg 0x5573416ff610: Added generic netlink header cmd=3 version=0
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/attr.c:470 nla_reserve: msg 0x5573416ff610: attr <0x557341703164> 1: Reserved 8 (4) bytes at offset +4 nlmsg_len=28
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/attr.c:507 nla_put: msg 0x5573416ff610: attr <0x557341703164> 1: Wrote 4 bytes at offset +4
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/attr.c:470 nla_reserve: msg 0x5573416ff610: attr <0x55734170316c> 2: Reserved 8 (4) bytes at offset +12 nlmsg_len=36
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/attr.c:507 nla_put: msg 0x5573416ff610: attr <0x55734170316c> 2: Wrote 4 bytes at offset +12
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/attr.c:470 nla_reserve: msg 0x5573416ff610: attr <0x557341703174> 3: Reserved 8 (4) bytes at offset +20 nlmsg_len=44
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/attr.c:507 nla_put: msg 0x5573416ff610: attr <0x557341703174> 3: Wrote 4 bytes at offset +20
Apr 11 09:37:19 master tlshd[1009]: DBG<2> ././lib/msg.c:572 nlmsg_free: msg 0x5573416ff610: Freed
Apr 11 09:37:19 master tlshd[1009]: Handshake with slave (192.168.0.Y) was successful
Apr 11 09:37:19 master tlshd[1009]: DBG<1>././lib/cache_mngt.c:302 nl_cache_mngt_unregister: Unregistered cache operations genl/family
我正在开发一个 Java 应用程序,该应用程序无法创建与 API 的连接以进行集成。我的握手失败了,甚至使用wireshark来获取流量。我半信半疑这是 TLS 版本问题。
我看到握手失败,协议显示 TLSv1,我猜这就是问题所在。另外,如果我尝试使用 cURL 或 openSSL 连接到此 API,它会起作用并在 ClientHello 位的协议中显示 TLSv1.3。
如果我查看 ClientHello 的详细信息,它会显示 TlSv1.2 作为请求的协议,因此我不确定为什么这是一个问题。
谁能指出我如何从中获取更多信息的方向?如果有人能给我指明方向,让 Java 应用程序改变它在这方面的行为,那就太好了。
PCAP:https://drive.google.com/file/d/1qbzgU6L9AhPY8IPIy6KM1C6BP7ghOaAV/view ?usp=sharing
SSL握手的Java调试:
javax.net.ssl|DEBUG|17|HttpClient-1-Worker-0|2024-04-04 21:42:19.180 EDT|ClientHello.java:640|Produced ClientHello handshake message (
"ClientHello": {
"client version" : "TLSv1.2",
"random" : "450D606506B1335CBF914F1AF981CE839E0A832B5648DA495514698FB44C3002",
"session id" : "567D9AC550CAD29ACBEAF2328E9A51E9E5D167C97C8B6CA750BDD611AC48BE7D",
"cipher suites" : "[TLS_AES_256_GCM_SHA384(0x1302), TLS_AES_128_GCM_SHA256(0x1301), TLS_CHACHA20_POLY1305_SHA256(0x1303), TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(0xC02C), TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(0xC02B), TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256(0xCCA9), TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xC030), TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256(0xCCA8), TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(0xC02F), TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(0x009F), TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256(0xCCAA), TLS_DHE_DSS_WITH_AES_256_GCM_SHA384(0x00A3), TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(0x009E), TLS_DHE_DSS_WITH_AES_128_GCM_SHA256(0x00A2), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384(0xC024), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(0xC028), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(0xC023), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(0xC027), TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(0x006B), TLS_DHE_DSS_WITH_AES_256_CBC_SHA256(0x006A), TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(0x0067), TLS_DHE_DSS_WITH_AES_128_CBC_SHA256(0x0040), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(0xC00A), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(0xC014), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(0xC009), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(0xC013), TLS_DHE_RSA_WITH_AES_256_CBC_SHA(0x0039), TLS_DHE_DSS_WITH_AES_256_CBC_SHA(0x0038), TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x0033), TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x0032), TLS_RSA_WITH_AES_256_GCM_SHA384(0x009D), TLS_RSA_WITH_AES_128_GCM_SHA256(0x009C), TLS_RSA_WITH_AES_256_CBC_SHA256(0x003D), TLS_RSA_WITH_AES_128_CBC_SHA256(0x003C), TLS_RSA_WITH_AES_256_CBC_SHA(0x0035), TLS_RSA_WITH_AES_128_CBC_SHA(0x002F), TLS_EMPTY_RENEGOTIATION_INFO_SCSV(0x00FF)]",
"compression methods" : "00",
"extensions" : [
"status_request (5)": {
"certificate status type": ocsp
"OCSP status request": {
"responder_id": <empty>
"request extensions": {
<empty>
}
}
},
"supported_groups (10)": {
"named groups": [x25519, secp256r1, secp384r1, secp521r1, x448, ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192]
},
"ec_point_formats (11)": {
"formats": [uncompressed]
},
"application_layer_protocol_negotiation (16)": {
[h2, http/1.1]
},
"status_request_v2 (17)": {
"cert status request": {
"certificate status type": ocsp_multi
"OCSP status request": {
"responder_id": <empty>
"request extensions": {
<empty>
}
}
}
},
"extended_master_secret (23)": {
<empty>
},
"session_ticket (35)": {
<empty>
},
"signature_algorithms (13)": {
"signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, ed25519, ed448, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]
},
"supported_versions (43)": {
"versions": [TLSv1.3, TLSv1.2]
},
"psk_key_exchange_modes (45)": {
"ke_modes": [psk_dhe_ke]
},
"signature_algorithms_cert (50)": {
"signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, ed25519, ed448, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]
},
"key_share (51)": {
"client_shares": [
{
"named group": x25519
"key_exchange": {
0000: F9 2E FF DC 09 15 6C 94 D7 44 F4 95 00 C5 A0 EE ......l..D......
0010: C1 CD 97 E0 7E B4 77 05 B6 E9 2C 79 DB 83 A5 43 ......w...,y...C
}
},
{
"named group": secp256r1
"key_exchange": {
0000: 04 6E FA 0C F4 C2 62 10 D0 98 44 1F F8 C5 A9 90 .n....b...D.....
0010: 42 02 8D 42 B0 83 A7 11 15 C1 39 58 B7 17 E1 6B B..B......9X...k
0020: BC 19 00 BF 0D D1 98 D6 FF 87 4E A9 32 19 25 77 ..........N.2.%w
0030: DB 0C 51 20 74 06 46 55 89 F8 56 32 B3 03 E4 DB ..Q t.FU..V2....
0040: A2
}
},
]
}
]
}
)
javax.net.ssl|DEBUG|17|HttpClient-1-Worker-0|2024-04-04 21:42:19.208 EDT|Alert.java:232|Received alert message (
"Alert": {
"level" : "fatal",
"description": "handshake_failure"
}
)
因此,我们将 ADFS 代理与 ADFS (Install-WebApplicationProxy) 连接,都是 Windows Server 2019。必须重新建立信任,但等待很长时间,正在重试身份验证
ADFS 端的事件 276 具有奇怪的值:
联合服务器代理无法向联合身份验证服务进行身份验证。用户操作 确保代理受到联合身份验证服务的信任。为此,请使用证书使用者名称中标识的主机名登录到代理计算机,并使用 Install-WebApplicationProxy cmdlet 在代理和联合身份验证服务之间重新建立信任。
附加数据
证书详情:
主题名称: 指纹:
不在时间之前:
不在时间之后:
代理每约 20 秒重试一次身份验证,就会发生很多此类事件。然而,Install-WebApplicationProxy 之后生成的第一个事件是 395:
使用帐户“example\administrator”成功建立联合服务器代理和联合身份验证服务之间的信任。
代理信任证书主题:CN=ADFS ProxyTrust - ADFSproxy。代理信任证书指纹:3F5DBD1C735A57C5FEA8C18905EE83CEAE3EA732 显然我的凭据是正确的,证书可以传递到 ADFS。我使用 certlm.msc 验证了它 - 证书位于 AdfsTrustedDevices 下
我在 ADFS 和 ADFS 代理上看到以下事件:
事件 36867:
创建 TLS 客户端凭据。
但是,对于 ADFS 代理,也存在警告,事件 ID 36857:
远程服务器已请求 TLS 客户端身份验证,但找不到合适的客户端证书。将尝试匿名连接。此 TLS 连接请求可能会成功或失败,具体取决于服务器的策略设置。
打开调试日志。
广告文件系统:
多个事件 107 错误:
ProxyRequestHandler.DefaultExceptionHandler:无法验证 ProxyTrust 的主题名称为“”和指纹“”的证书。
异常详细信息: 异常:未找到与请求关联的客户端证书。StackTrace:在 Microsoft.IdentityServer.Web.Proxy.TlsRequestVerificationMethod.VerifyTrustedRequest(WrappedHttpListenerContext 上下文,String&auditInformation) 在 Microsoft.IdentityServer.Web.Rest.RestRequestHandler.OnGetContext(WrappedHttpListenerContext 上下文)
检索代理配置时出错。Microsoft.IdentityServer.WebHost.Proxy.ProxyTrustException:找不到与请求关联的客户端证书。在 Microsoft.IdentityServer.Web.Proxy.TlsRequestVerificationMethod.VerifyTrustedRequest(WrappedHttpListenerContext 上下文,字符串&auditInformation) 在 Microsoft.IdentityServer.Web.Rest.RestRequestHandler.OnGetContext(WrappedHttpListenerContext 上下文)
TlsRequestVerificationMethod:传入请求不包含证书。
ADFS 代理。
事件 54:
Found certificate matching thumbprint '3F5DBD1C735A57C5FEA8C18905EE83CEAE3EA732'
事件 52 错误:
配置请求失败,状态:ProtocolError 消息:远程服务器返回错误:(401) 未经授权。异常:System.Net.WebException:远程服务器返回错误:(401)未经授权。在 System.Net.HttpWebRequest.GetResponse() 在 Microsoft.IdentityServer.Management.Proxy.StsConfigurationProvider.GetStsProxyConfiguration(X509Certificate2 trustCert)
随机尝试的事情
总而言之,似乎证书已传递到 ADFS,但客户端身份验证失败。
我不太了解 ADFS 代理/Web 应用程序代理的内部结构 - 希望有人可以指导我如何进一步解决此问题。现在我们必须忍受一些停机时间:(
PS 如果有人建议重新建立信任 - 我正在尝试这样做。这些事件是作为该过程的一部分生成的。它失败并显示:尝试从联合服务器检索配置数据时发生错误。无法检索亲...
PPS 是否有某种配置阻止 AdfsTrustedDevices 中的证书用于客户端身份验证?PSADFS ProxyTrust - ADFSproxy
证书没有任何增强的密钥用法 - 但我检查了其他正在运行的代理服务器,它也没有。它如何信任这个自签名证书?ADFS 是否隐式信任 AdfsTrustedDevices 中的自签名证书?
为什么使用带有查询参数的重定向或自动表单发布在两个 Web 应用程序之间交换的数据不能被每个 Web 应用程序信任,即使使用 HTTPS 也是如此?
笔记:
据我了解,使用查询参数进行数据交换具有固有的安全风险,例如 CSRF、通过浏览器历史记录和访问日志泄露数据,而自动表单发布具有固有的 CSRF 安全风险。不过,这不是这里讨论的重点。假设我们减轻了 CSRF。当前的问题是,“为什么每个 Web 应用程序都不能信任交换的数据,即使使用 HTTPS 也是如此?”
用例:考虑在https://one.abc.com和https://two.xyz.com 上运行的两个 Web 应用程序。他们都希望交换数据但无法直接通信。
详细流程: 访问https://one.abc.com时,页面会显示一个按钮。单击时,它会提交到https://one.abc.com,然后重定向到https://two.xyz.com。在https://two.xyz.com上,存在另一个按钮,单击该按钮时,会提交到https://two.xyz.com并重定向到https://one.abc.com。
由于一切都通过 HTTPS 进行,因此所有元素(包括 URL、查询参数和标头)都会在重定向期间加密。
通过此设置,可以使用查询参数或自动表单发布来实现两个 Web 应用程序之间的数据交换。
但是,为什么每个 Web 应用程序不能信任交换的数据,即使使用 HTTPS 也是如此?
简单来说,在第一步中,如果https://one.abc.com
使用带有查询参数的重定向或自动表单发布将数据发送到https://two.xyz.com
,https://two.xyz.com
则无法相信数据确实源自https://one.abc.com
,即使使用 HTTPS 也是如此。
同样,在第二步中,如果https://two.xyz.com
使用带有查询参数的重定向或自动表单发布将数据发送到https://one.abc.com
,https://one.abc.com
则无法相信数据确实源自https://one.abc.com
,即使使用 HTTPS 也是如此。
上述技术用于 SAML、OIDC 中的 SSO。
请告诉我以下理解是否正确:
one.abc.com
在所描述的从到two.xyz.com
和返回 到 的重定向流程中one.abc.com
,TLS(传输层安全性)加密是在您的浏览器和涉及的每个服务器之间单独建立的。让我们分解一下流程:
从one.abc.com
到two.xyz.com
:
one.abc.com
发起请求。one.abc.com
one.abc.com
使用重定向响应(HTTP 302 Found)进行响应,指示您的浏览器转到two.xyz.com
.two.xyz.com
,在您的浏览器和 之间建立单独的 TLS 连接two.xyz.com
。从two.xyz.com
返回到one.abc.com
:
two.xyz.com
发起请求。two.xyz.com
two.xyz.com
使用重定向响应(HTTP 302 Found)进行响应,指示您的浏览器转到one.abc.com
.one.abc.com
,在您的浏览器和 之间建立单独的 TLS 连接one.abc.com
。每个连接(从您的浏览器到two.xyz.com
以及从您的浏览器返回到one.abc.com
)均使用 TLS 独立加密。TLS 加密可确保浏览器和每个服务器之间通信的机密性和完整性,从而保护重定向流期间交换的数据。
two.xyz.com
但是,重定向流之间以及one.abc.com
重定向流期间没有建立直接的 TLS 连接。相反,HTTPS 连接在每个服务器端点处单独终止和重新建立。
因此,在 SAML 中,IDP 签署SAML assertion
,而在 OIDC 中,OIDC 提供商签署id_token
。
我在 docker 容器内运行 Postfix。证书由 certbot 生成。
具有以下配置:
smtpd_tls_cert_file=/var/keys/fullchain.pem
smtpd_tls_key_file=/var/keys/privkey.pem
smtpd_use_tls=yes
smtp_tls_security_level = encrypt
每次尝试向 Gmail 发送电子邮件都会导致:
status=deferred (TLS is required but was not offered by host alt1.aspmx.l.google.co
当我更改smtp_tls_security_level
为时may
,电子邮件就会发出;但是,如果没有 TLS,则根本无法解决问题。
当我进行 openssl tls 检查时,一切似乎都很好;它没有将其附加到电子邮件中。
有谁知道我做错了什么?
禁用 ipv6 并添加 debug_peer_list 后登录:
Feb 8 10:50:24 92d95fdf2397 postfix/cleanup[489]: 2910E1667CE: message-id=<[email protected]>
Feb 8 10:50:24 92d95fdf2397 postfix/qmgr[481]: 2910E1667CE: from=<[email protected]>, size=6181, nrcpt=1 (queue active)
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: initializing the client-side TLS engine
Feb 8 10:50:24 92d95fdf2397 postfix/smtpd[485]: disconnect from ec2-54-154-126-37.eu-west-1.compute.amazonaws.com[54.154.126.37]
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: 2910E1667CE: enabling PIX workarounds: disable_esmtp delay_dotcrlf for aspmx.l.google.com[66.102.1.26]:25
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: 2910E1667CE: TLS is required, but was not offered by host aspmx.l.google.com[66.102.1.26]
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: 2910E1667CE: enabling PIX workarounds: disable_esmtp delay_dotcrlf for alt1.aspmx.l.google.com[142.250.153.27]:25
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: 2910E1667CE: TLS is required, but was not offered by host alt1.aspmx.l.google.com[142.250.153.27]
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: 2910E1667CE: enabling PIX workarounds: disable_esmtp delay_dotcrlf for alt2.aspmx.l.google.com[142.251.9.27]:25
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: 2910E1667CE: TLS is required, but was not offered by host alt2.aspmx.l.google.com[142.251.9.27]
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: smtp_stream_setup: maxtime=300 enable_deadline=0
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: < aspmx3.googlemail.com[142.251.9.27]:25: 220 ********************************************************************************
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: name_mask: disable_esmtp
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: name_mask: delay_dotcrlf
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: 2910E1667CE: enabling PIX workarounds: disable_esmtp delay_dotcrlf for aspmx3.googlemail.com[142.251.9.27]:25
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: > aspmx3.googlemail.com[142.251.9.27]:25: HELO mail.example.net
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: < aspmx3.googlemail.com[142.251.9.27]:25: 250 mx.google.com at your service
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: server features: 0x30000 size 0
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: 2910E1667CE: TLS is required, but was not offered by host aspmx3.googlemail.com[142.251.9.27]
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: smtp_stream_setup: maxtime=300 enable_deadline=0
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: > aspmx3.googlemail.com[142.251.9.27]:25: QUIT
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: name_mask: resource
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: name_mask: software
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: 2910E1667CE: enabling PIX workarounds: disable_esmtp delay_dotcrlf for aspmx2.googlemail.com[142.250.153.27]:25
Feb 8 10:50:24 92d95fdf2397 postfix/smtp[490]: 2910E1667CE: to=<[email protected]>, relay=aspmx2.googlemail.com[142.250.153.27]:25, delay=0.37, delays=0.05/0.01/0.31/0, dsn=4.7.4, status=deferred (TLS is required, but was not offered by host aspmx2.googlemail.com[142.250.153.27])
配置 syslog-ng 服务器以通过 TLS 从云服务接收系统日志消息。
syslog-ng 服务器位于 Azure 上的 Ubuntu 实例上,且最新版本 (4.5)。
这是测试实现的基本配置。我已经为服务器创建了一个自签名证书用于测试。
当服务器运行并让云服务发送日志时,系统日志服务器控制台上会出现以下错误消息:
读取流时发生 SSL 错误;tls_error='错误:1417C0C7:SSL 例程:tls_process_client_certificate:对等方未返回证书',location='/etc/syslog-ng/tls.conf:4:1'
配置文件:
@version:4.5
source demo_tls_source {
tcp(port(6514)
tls( key_file("/etc/syslog-ng/cert.d/syslog.key")
cert_file("/etc/syslog-ng/cert.d/syslog.crt")
ca_dir("/etc/syslog-ng/cert.d"))
); };
destination d_file { file("/var/log/fromnet"); };
log { source(demo_tls_source); destination(d_file); };
不确定如何解决此问题,任何建议都会有所帮助。
我已经运行 postfixmail.myserver.com
超过 15 年了,成功地接收和发送邮件。使用 Let's Encrypt,所有证书都完全有效。我可以验证它们是否可以很好地用于openssl s_client -connect mail.myserver.com:25 -starttls smtp
验证端口 465 上的 STARTTLS 和 SSL 的类似测试。
我说这一切都是为了证明这不是一个新的设置,除了这个单一的实例之外,一切似乎都设置正确并且运行顺利。
鉴于此,我发现自己无法接收来自特定供应商(我的健康提供者!)的电子邮件。查看后缀日志,我看到如下行:
postfix/smtpd[2016]: connect from mail1.static.mydoctor.com[xxx.xx.xx.xxx]
postfix/smtpd[2016]: SSL_accept error from mail1.static.mydoctor.com[xxx.xx.xx.xxx]: 0
postfix/smtpd[2016]: warning: TLS library problem: 2016:error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:s3_pkt.c:1493:SSL alert number 42:
postfix/smtpd[2016]: lost connection after STARTTLS from mail1.static.mydoctor.com[xxx.xx.xx.xxx]
postfix/smtpd[2016]: disconnect from mail1.static.mydoctor.com[xxx.xx.xx.xxx]
这告诉我mail1.static.mydoctor.com
邮件服务器正在尝试通过 STARTTLS 连接到我的服务器mail.myserver.com
,但提供了错误的证书,因此我的后缀拒绝连接。如果我的解释不正确,请告诉我!
我确实需要接收这些特定的电子邮件,即使发件人做错了。在这种情况下什么样的解决方法可能有效?有没有办法放松证书检查以允许错误的证书?或者也许将该特定远程服务器列入白名单,以便接受它发送的任何内容?还有别的事吗?
自 Certbot 2.0 起, Let's Encrypt 已开始默认颁发 ECC 证书。对于现代 Web 浏览器来说这不是问题,但 Let's Encrypt 证书也可以用于 HTTPS 之外的其他用途。即,某些 SMTP 服务器尚不支持 ECC 证书。STARTTLS
如果此类服务器尝试与使用 ECC 证书的 Postfix建立连接,则会失败。
日志表明不存在共享密码,尽管 Wireshark 显示 TLS 握手中的客户端 Hello 显然具有通过配置的列表的公共密码smtpd_tls_mandatory_ciphers = medium
。
postfix/smtpd[1337]: connect from mail.example.net[198.51.100.1]
postfix/smtpd[1337]: SSL_accept error from mail.example.net[198.51.100.1]: -1
postfix/smtpd[1337]: warning: TLS library problem: error:0A0000C1:SSL routines::no shared cipher:../ssl/statem/statem_srvr.c:2220:
postfix/smtpd[1337]: lost connection after STARTTLS from mail.example.net[198.51.100.1]
postfix/smtpd[1337]: disconnect from mail.example.net[198.51.100.1] ehlo=1 starttls=0/1 commands=1/2
该问题是由证书类型引起的。是否可以使用 Certbot 从 Let's Encrypt 获取 ECC 和 RSA 证书?如何配置 Postfix 同时使用它们?