- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们在公司 MITM 代理后面有两台 Ubuntu Linux 机器,它重新加密了 HTTPS 流量。为了通过此代理,我们需要将自定义 TLS 证书添加到 /etc/ssl/cert/ca-certificates.crt
Ubuntu的文件。
现在,我们的一台机器设置正确,所以它可以访问主机 A。另一台机器不能这样做,可能是因为缺少正确的证书。我们想知道哪些证书是“正确的”并将它们添加到另一台机器上。
成功 session 的痕迹如下所示(更改了一些名称和 IP):
$ curl -L https://A.com -vvvv
* Trying 10.123.89.26...
* TCP_NODELAY set
* Connected to <PROXY> port 3128 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to A.com:443
> CONNECT A.com:443 HTTP/1.1
> Host: A.com:443
> User-Agent: curl/7.58.0
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
<
* Proxy replied 200 to CONNECT request
* CONNECT phase completed!
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CONNECT phase completed!
* CONNECT phase completed!
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: C=CN; DC=appName gitlab; DC=caName sha256; ST=pkiNo 255088; O=EVILCORP; OU=IT; CN=A.com; emailAddress=admin@admin.com
* start date: Jan 10 09:02:59 2019 GMT
* expire date: Jan 9 09:02:59 2024 GMT
* subjectAltName: host "A.com" matched cert's "A.com"
* issuer: CN=HWIT Enterprise CA 1
* SSL certificate verify ok.
现在,我们还应该收集什么信息才能说,例如,是证书 X 允许我们运行这个 session ?
-----BEGIN CERTIFICATE-----
MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE
AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw
...
...
-----END CERTIFICATE-----
最佳答案
最简单的方法 :肯定有一种完善的方法可以找到和下载 MITM 代理的 CA 证书,而且肯定有记录在某处。您不需要从另一台机器的系统池中寻找正确的 CA。
也就是说,如果您真的必须知道如何仅使用与随机网站的连接来找到正确的 CA 证书,请继续阅读。
这可以分两步完成:
www.google.com
为例: 请注意,我是故意告诉
openssl
不是 使用系统 CA 池,实际上不信任任何东西。当你运行它时,你不需要
-no-CApath
争论。
$ openssl s_client -no-CApath -connect www.google.com:443
CONNECTED(00000003)
depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
verify return:1
---
Certificate chain
0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
i:C = US, O = Google Trust Services, CN = GTS CA 1O1
1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1
i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
---
etc.....
服务器返回了两个证书:带有
CN = www.google.com
的服务器证书及其发行者(中间 CA)属于
Google Trust Services
.中间 CA 由
GlobalSign Root CA - R2
颁发,这就是我们需要找到的证书。
OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
.
openssl
再次。让我们只检查一个证书(如果文件名对您没有帮助,您可能需要检查多个证书。一个小脚本应该可以解决问题):
$ openssl x509 -text -in /usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R2.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:00:00:00:00:01:0f:86:26:e6:0d
Signature Algorithm: sha1WithRSAEncryption
Issuer: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
Validity
Not Before: Dec 15 08:00:00 2006 GMT
Not After : Dec 15 08:00:00 2021 GMT
Subject: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
etc...
此证书具有主题专有名称:
OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
这与颁发者的专有名称完全匹配。是
大概正确的证书(可能有多个具有相同名称的证书,通常在证书更新时)。
CN=HWIT Enterprise CA 1
(假设 curl 打印了整个名称)。
Authority Key Identifier
可以与可能的 CA 的
Subject Key Identifier
匹配.
关于ubuntu - 如何确定哪个 Linux TLS 证书允许我访问给定的主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63937420/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
Linux 管道可以缓冲多少数据?这是可配置的吗? 如果管道的两端在同一个进程中,但线程不同,这会有什么不同吗? 请注意:这个“同一个进程,两个线程”的问题是理论上的边栏,真正的问题是关于缓冲的。 最
我找到了here [最后一页] 一种有趣的通过 Linux 启动 Linux 的方法。不幸的是,它只是被提及,我在网上找不到任何有用的链接。那么有人听说过一种避免引导加载程序而使用 Linux 的方法
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我试图了解 ld-linux.so 如何在 Linux 上解析对版本化符号的引用。我有以下文件: 测试.c: void f(); int main() { f(); } a.c 和 b.c:
与 RetroPie 的工作原理类似,我可以使用 Linux 应用程序作为我的桌面环境吗?我实际上并不需要像实际桌面和安装应用程序这样的东西。我只需要一种干净简单的方法来在 RaspberryPi 上
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
有什么方法可以覆盖现有的源代码,我应该用 PyQt、PyGTK、Java 等从头开始构建吗? 最佳答案 如果您指的是软件本身而不是它所连接的存储库,那么自定义应用程序的方法就是 fork 项目。据我所
我的情况是:我在一个磁盘上安装了两个 linux。我将第一个安装在/dev/sda1 中,然后在/dev/sda2 中安装第二个然后我运行第一个系统,我写了一个脚本来在第一个系统运行时更新它。
我在 i2c-0 总线上使用地址为 0x3f 的系统监视器设备。该设备在设备树中配置有 pmbus 驱动程序。 问题是,加载 linux 内核时,这个“Sysmon”设备没有供电。因此,当我在总线 0
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我正试图在 linux 模块中分配一大块内存,而 kalloc 做不到。 我知道唯一的方法是使用 alloc_bootmem(unsigned long size) 但我只能从 linux 内核而不是
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我有 .sh 文件来运行应用程序。在该文件中,我想动态设置服务器名称,而不是每次都配置。 我尝试了以下方法,它在 CentOS 中运行良好。 nohup /voip/java/jdk1.8.0_71/
我是在 Linux 上开发嵌入式 C++ 程序的新手。我有我的 Debian 操作系统,我在其中开发和编译了我的 C++ 项目(一个简单的控制台进程)。 我想将我的应用程序放到另一个 Debian 操
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我使用4.19.78版本的稳定内核,我想找到带有企鹅二进制数据的C数组。系统启动时显示。我需要在哪里搜索该内容? 我在 include/linux/linux_logo.h 文件中只找到了一些 Log
我知道可以使用 gdb 的服务器模式远程调试代码,我知道可以调试针对另一种架构交叉编译的代码,但是是否可以更进一步,从远程调试 Linux 应用程序OS X 使用 gdbserver? 最佳答案 当然
是否有任何可能的方法来运行在另一个 Linux 上编译的二进制文件?我知道当然最简单的是在另一台机器上重建它,但假设我们唯一能得到的是一个二进制文件,那么这可能与否? (我知道这可能并不容易,但我只是
我是一名优秀的程序员,十分优秀!