我们正在使用OpenJDK 13连接到https url,并且SSL握手遇到问题。它总是以javax.net.ssl.SSLHandshakeException结尾:DH ServerKeyExchange不符合算法约束
我已使用系统属性-Djavax.net打开了ssl调试输出。debug=ssl:handshake
查看发生了什么。
"ClientHello": {
"client version" : "TLSv1.2",
"random" : "65 BC 66 59 53 A2 29 F5 DF 14 0F 9F 3D C2 AC E3 90 69 92 A2 53 4F 61 1E 1A BD AA 8A 67 4C 14 D9",
"session id" : "DB BA 01 32 DF 4A 86 36 71 FA DA 0D 9E D7 F3 3B 94 E9 32 84 95 2A 61 FA 8D 01 FB 87 75 E1 F8 A9",
"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_ECDH_ECDSA_WITH_AES_256_GCM_SHA384(0xC02E), TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384(0xC032), TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256(0xC02D), TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256(0xC031), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384(0xC026), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384(0xC02A), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256(0xC025), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(0xC029), 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_ECDH_ECDSA_WITH_AES_256_CBC_SHA(0xC005), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA(0xC00F), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA(0xC004), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA(0xC00E), 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" : [
"server_name (0)": {
type=host_name (0), value=xxx
},
"status_request (5)": {
"certificate status type": ocsp
"OCSP status request": {
"responder_id": <empty>
"request extensions": {
<empty>
}
}
},
"supported_groups (10)": {
"versions": [x25519, secp256r1, secp384r1, secp521r1, x448, ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192]
},
"ec_point_formats (11)": {
"formats": [uncompressed]
},
"signature_algorithms (13)": {
"signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, 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_sha1, rsa_pkcs1_sha1, dsa_sha1]
},
"signature_algorithms_cert (50)": {
"signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, 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_sha1, rsa_pkcs1_sha1, dsa_sha1]
},
"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>
},
"supported_versions (43)": {
"versions": [TLSv1.3, TLSv1.2, TLSv1.1, TLSv1]
},
"psk_key_exchange_modes (45)": {
"ke_modes": [psk_dhe_ke]
},
"key_share (51)": {
"client_shares": [
{
"named group": x25519
"key_exchange": {
0000: 3C 66 CB BA 20 25 F8 AD 39 51 1E 7D 3F B7 22 0F <f.. %..9Q..?.".
0010: E6 DD 72 1A A8 29 57 3E E3 20 E8 20 80 00 8F 5F ..r..)W>. . ..._
}
},
]
}
]
}
"ServerHello": {
"server version" : "TLSv1",
"random" : "5E 69 ED 04 D0 13 E5 27 7C BC F1 A7 4F AA 29 49 88 15 C7 22 2B AE CA 3E 4A 34 F0 B4 F4 61 5C 2F",
"session id" : "5E 69 ED 04 B3 7D 7A 47 98 84 8E A5 C0 D8 9A CE 46 03 C0 CA C5 A9 23 9E CD 22 9C 1F E2 63 49 B7",
"cipher suite" : "TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x0033)",
"compression methods" : "00",
"extensions" : [
"renegotiation_info (65,281)": {
"renegotiated connection": [<no renegotiated connection>]
}
]
}
...Server certificate deleted...
"DH ServerKeyExchange": {
"parameters": {
"dh_p": {
0000: E9 E6 42 59 9D 35 5F 37 C9 7F FD 35 67 12 0B 8E ..BY.5_7...5g...
0010: 25 C9 CD 43 E9 27 B3 A9 67 0F BE C5 D8 90 14 19 %..C.'..g.......
0020: 22 D2 C3 B3 AD 24 80 09 37 99 86 9D 1E 84 6A AB "....$..7.....j.
0030: 49 FA B0 AD 26 D2 CE 6A 22 21 9D 47 0B CE 7D 77 I...&..j"!.G...w
0040: 7D 4A 21 FB E9 C2 70 B5 7F 60 70 02 F3 CE F8 39 .J!...p..`p....9
0050: 36 94 CF 45 EE 36 88 C1 1A 8C 56 AB 12 7A 3D AF 6..E.6....V..z=.
},
"dh_g": {
0000: 30 47 0A D5 A0 05 FB 14 CE 2D 9D CD 87 E3 8B C7 0G.......-......
0010: D1 B1 C5 FA CB AE CB E9 5F 19 0A A7 A3 1D 23 C4 ........_.....#.
0020: DB BC BE 06 17 45 44 40 1A 5B 2C 02 09 65 D8 C2 .....ED@.[,..e..
0030: BD 21 71 D3 66 84 45 77 1F 74 BA 08 4D 20 29 D8 .!q.f.Ew.t..M ).
0040: 3C 1C 15 85 47 F3 A9 F1 A2 71 5B E2 3D 51 AE 4D <...G....q[.=Q.M
0050: 3E 5A 1F 6A 70 64 F3 16 93 3A 34 6D 3F 52 92 52 >Z.jpd...:4m?R.R
},
"dh_Ys": {
0000: 65 6B 34 FD 17 66 20 CA 13 F4 7A 4C C6 0B 9C DE ek4..f ...zL....
0010: 0F 07 40 A2 95 6F D3 D1 91 86 5F ED 4F D4 AA 52 ..@..o...._.O..R
0020: 6F C0 31 84 02 8B AF F0 CE FA D2 92 D1 BA E8 99 o.1.............
0030: BF BF 80 AF 93 D1 B7 2C 45 36 94 14 0B FD 95 AA .......,E6......
0040: A6 07 52 26 60 0A CA 27 61 16 C9 5D 55 13 D9 9C ..R&`..'a..]U...
0050: 43 4B D5 47 AE 39 8B 2E A6 5A A2 25 86 11 34 7A CK.G.9...Z.%..4z
},
},
"signature": {
0000: 3E D4 F6 7C 57 EC CA CF FA DC 5C 18 01 E3 AF C2 >...W.....\.....
0010: 03 A0 94 58 51 9E DE 6B 5B 05 FB BD 9C A5 96 A5 ...XQ..k[.......
0020: F3 72 D0 A8 20 3A C7 F9 85 5E 2D EF 87 97 2F 38 .r.. :...^-.../8
0030: CD 0E 10 BD 0C FD 99 C3 96 A7 BD B8 40 E4 79 74 ............@.yt
0040: 17 8A 6E DC B3 E7 8B 32 64 FD 97 4D 0E F0 F5 0C ..n....2d..M....
0050: C6 EC 86 44 83 DD A0 EB 8C 72 F1 70 DE 94 5D 74 ...D.....r.p..]t
0060: 97 E7 B6 AA B2 C0 9D 97 F8 CD DF 2B 55 33 A6 A4 ...........+U3..
0070: 54 87 AE AD 62 FF 21 34 68 C4 09 62 67 D1 4E 92 T...b.!4h..bg.N.
0080: BD D7 0E DC 86 31 3B D8 16 2A 19 70 7A C7 08 42 .....1;..*.pz..B
0090: 51 61 CC A5 E6 41 8E 56 8C 77 6A 88 39 51 7E C3 Qa...A.V.wj.9Q..
00A0: 6E E9 2F 74 65 A6 55 2B 0B 2A 58 DE C8 0C 7D 5D n./te.U+.*X....]
00B0: 85 06 4C 8C 53 EF EE 46 0D 20 00 7E 0A 59 7A 2E ..L.S..F. ...Yz.
00C0: 5F 97 F2 9C FC C2 7E 7C 6A 96 21 E5 C0 4F 53 0F _.......j.!..OS.
00D0: 89 42 7F 3A 02 1D 2C ED B9 B0 6C 37 D4 D8 79 58 .B.:..,...l7..yX
00E0: D9 F3 84 CE 82 67 B9 5D D1 76 BD 32 5D 37 6D 81 .....g.].v.2]7m.
00F0: C1 4D 19 D1 20 95 0C 20 A2 96 B0 BF DD 72 50 C8 .M.. .. .....rP.
}
}
我在这里看到两件事:
所以我创建了一个自定义java。我允许DH密钥大小为768位的安全文件。属性<code>jdk.tls。disabledAlgorithms是从主java复制的。安全文件和DH完全相同。
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 768, EC keySize < 224, 3DES_EDE_CBC, anon, NULL
现在SSL握手可以工作,但服务器设置了TLSv1.2和TLS_AES_256_GCM_SHA384密码,而不是TLS_ DHE_。
"ClientHello": {
"client version" : "TLSv1.2",
"random" : "64 2E 04 AA 0D 6E 5D 53 D9 4A 5B B8 62 06 06 1C E3 54 BA 6F 7C 68 DE AC 3F B5 BD E1 7E 71 96 A6",
"session id" : "A4 A8 1A BD 44 39 6C 2C 9E 88 E3 72 B9 57 87 D7 CF 0C 7D E6 0F 31 B5 89 BE 61 C9 55 3D 22 E7 37",
"cipher suites" : "[TLS_AES_128_GCM_SHA256(0x1301), TLS_AES_256_GCM_SHA384(0x1302), TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(0xC02C), TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(0xC02B), TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xC030), TLS_RSA_WITH_AES_256_GCM_SHA384(0x009D), TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384(0xC02E), TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384(0xC032), TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(0x009F), TLS_DHE_DSS_WITH_AES_256_GCM_SHA384(0x00A3), TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(0xC02F), TLS_RSA_WITH_AES_128_GCM_SHA256(0x009C), TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256(0xC02D), TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256(0xC031), 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_RSA_WITH_AES_256_CBC_SHA256(0x003D), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384(0xC026), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384(0xC02A), TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(0x006B), TLS_DHE_DSS_WITH_AES_256_CBC_SHA256(0x006A), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(0xC00A), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(0xC014), TLS_RSA_WITH_AES_256_CBC_SHA(0x0035), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA(0xC005), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA(0xC00F), TLS_DHE_RSA_WITH_AES_256_CBC_SHA(0x0039), TLS_DHE_DSS_WITH_AES_256_CBC_SHA(0x0038), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(0xC023), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(0xC027), TLS_RSA_WITH_AES_128_CBC_SHA256(0x003C), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256(0xC025), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(0xC029), TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(0x0067), TLS_DHE_DSS_WITH_AES_128_CBC_SHA256(0x0040), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(0xC009), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(0xC013), TLS_RSA_WITH_AES_128_CBC_SHA(0x002F), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA(0xC004), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA(0xC00E), TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x0033), TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x0032)]",
"compression methods" : "00",
"extensions" : [
"server_name (0)": {
type=host_name (0), value=xxx
},
"status_request (5)": {
"certificate status type": ocsp
"OCSP status request": {
"responder_id": <empty>
"request extensions": {
<empty>
}
}
},
"supported_groups (10)": {
"versions": [secp256r1, secp384r1, secp521r1, sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1, secp256k1, ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192]
},
"ec_point_formats (11)": {
"formats": [uncompressed]
},
"signature_algorithms (13)": {
"signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, 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_sha1, rsa_pkcs1_sha1, dsa_sha1]
},
"signature_algorithms_cert (50)": {
"signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, 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_sha1, rsa_pkcs1_sha1, dsa_sha1]
},
"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>
},
"supported_versions (43)": {
"versions": [TLSv1.3, TLSv1.2, TLSv1.1, TLSv1]
},
"psk_key_exchange_modes (45)": {
"ke_modes": [psk_dhe_ke]
},
"key_share (51)": {
"client_shares": [
{
"named group": secp256r1
"key_exchange": {
0000: 04 70 89 F8 9D 7D 5E 07 DC 46 E3 57 5C 24 02 0A .p....^..F.W\$..
0010: C0 10 53 20 03 ED 94 F0 EC 07 64 BE 8C B7 93 D1 ..S ......d.....
0020: 19 97 11 81 24 A5 8F 93 46 B3 AE A6 F0 5F 3E E6 ....$...F...._>.
0030: EA 4B 11 B8 C5 45 D0 8E CD AF FB 3A BF 50 B0 5E .K...E.....:.P.^
0040: 56
}
},
]
},
"renegotiation_info (65,281)": {
"renegotiated connection": [<no renegotiated connection>]
}
]
}
"ServerHello": {
"server version" : "TLSv1.2",
"random" : "AD E4 31 7A 81 AF 56 73 AC 4F F0 8B 20 D7 6D 6B F9 53 94 97 03 5C 9F 1E B8 7D 15 01 CF 5D 41 A1",
"session id" : "A4 A8 1A BD 44 39 6C 2C 9E 88 E3 72 B9 57 87 D7 CF 0C 7D E6 0F 31 B5 89 BE 61 C9 55 3D 22 E7 37",
"cipher suite" : "TLS_AES_256_GCM_SHA384(0x1302)",
"compression methods" : "00",
"extensions" : [
"supported_versions (43)": {
"selected version": [TLSv1.3]
},
"key_share (51)": {
"server_share": {
"named group": secp256r1
"key_exchange": {
0000: 04 95 DD 75 15 26 7D 43 4D FF 75 DE 93 55 13 2D ...u.&.CM.u..U.-
0010: 2B 80 45 02 C1 12 11 9B 68 89 19 BC 2E 06 36 4B +.E.....h.....6K
0020: 07 44 86 54 F2 42 1F 0E 6E D6 13 1D 10 6E C8 61 .D.T.B..n....n.a
0030: DC E1 74 97 E1 29 3F 5A 2A FE 42 31 1B 85 C8 A9 ..t..)?Z*.B1....
0040: C4
}
},
}
]
}
有人能解释一下jdk.tls.disabledAlgorithms
中的这种变化是如何迫使服务器更改TLS版本和密码的吗?
首先,你的第二个例子是TLS1.3而不是1.2。请记住,1.3在记录头和Hello fixed字段中仍然使用1.2的版本代码(0x0303),只将实际版本放在扩展43中,您可以在ServerHello中看到。此外,所选的密码套件TLS_AES_256_GCM_SHA384(0x1302)是仅1.3版本的密码套件;事实上,所有密码套件代码0x13xx都只有1.3。
在您的第一个和第二个示例中,ClientHello之间有很多差异。提供的密码套件列表不同,支持的组列表(扩展10)不同,提供的密钥共享是secp256r1而不是x25519,rfc5746使用扩展与SCSV。
你确定你的第二个例子是Java 13?我几乎可以将您的第一个示例与我的Oracle 13 . 0 . 0 OOTB版本相匹配,唯一意想不到的区别是我在supported_groups中获得了额外的EC曲线,这可能是因为您的版本或配置使用了不同的底层提供程序。OTOH你的第二个例子更接近我的Java 11结果,再次OOTB:密码套件匹配,除了我有rfc5746 SCSV,而你有扩展,IIRC可能是由于一个属性设置;组和方案匹配(11.0.5中除外)除了我把ecdsa_secp521r1错码为ecdsa_secp512r1这明显是个bug(并在my 12和13中修复)。
然而,这并不能解释不同的服务器响应,因为它们都是有效的TLS1.3产品。服务器似乎对您的第二个示例(如my Java 11(和12))提供secp256r1的keyshare做出了反应,而您的第一个示例(如my Java 13)提供x25519。可能服务器不喜欢x25519,所以它退回到1.0,而不是1.2(这仍然允许(FF)DHE与任意的非rfc7919组,并且给定这个ClientHello也与服务器选择的secp 256 r 1 ECD he)是愚蠢的,如果不是愚蠢的话。当然,当1.3服务器只不喜欢客户机keyshare时,正确的做法是发送HelloRetryRequest,这是Java (11以上版本)支持的,应该会产生使用secp256r1和AES256GCM的1.3连接。
PS:如果此服务器可公开访问,您可以尝试在其上 https://www.ssllabs.com/ssltest,看看会发现什么。
问题内容: 我的页面中有图像,并且在CSS选择器之前使用:bestyle。 图片是动态的,因此没有固定的宽度;所以我需要动态设置:before规则的宽度。 我想在客户端使用JQuery做到这一点。 假设: 如何使用JQuery 仅更改带有选择器的类的width属性(如果没有选择器,则不能更改一个类的width属性)? 问题答案: 我认为没有直接访问伪类规则的jQuery方法,但是您总是可以在文档的
我的nginx版本是: 我的应用程序安装在 当我访问 它工作正常。这是因为服务器根设置为; 现在我想使用。当我将服务器根目录更改为并键入上述URL时,它会使用http 302重定向到 这可能是什么原因? 然后,它将应用我的应用程序中的其他规则。conf并给出一个404。 我在访问日志中看到: 我的conf文件是:
我的Kubernetes集群运行在谷歌云下。我有部署运行端口443和LoadBalancer公开它到互联网。 我是这样创建的: 运行此命令后,loadbalancer将指向部署。现在,我创建了,并希望更改loadbalancer以指向新的部署()。 注意:删除和重新创建部署是释放外部IP地址,我想避免它。 如何在不丢失外部IP的情况下修补现有服务以指向另一个部署?
问题内容: 我在本地计算机上使用。在我们的网络服务器上,我们有。我们的服务器是共享服务器。所以我想通过文件更改我们服务器上的php版本。有可能做到吗?如果是,该怎么办? 问题答案: 要切换到PHP 4.4: 要切换到PHP 5.0: 要切换到PHP 5.1: 要切换到PHP 5.2: 要切换到PHP 5.3,请执行以下操作: 要切换到PHP 5.4: 要切换到PHP 5.5: 要切换到PHP 5.
问题内容: 我们的IT环境中有许多Red Hat Linux服务器。我的团队成员要求我编写一个脚本(最好是Shell脚本)以使用SSH一次更改每个用户的密码。 我试图找到一种解决方案,但是我发现许多脚本都在使用Expect。我们没有在服务器上安装Expect,系统管理员拒绝让我们安装它。此外,用户没有root访问权限,从而或无法使用。 有什么方法可以编写脚本,以便用户可以运行该脚本并更改列表中所有
本文向大家介绍属性选择器和伪类选择器的优先级?相关面试题,主要包含被问及属性选择器和伪类选择器的优先级?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 属性选择器和伪类选择器优先级相同