{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/hnrss-org/2026-10-21-mitmproxy-adds-emudhra-option/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "``\n\n`@@ -60,6 +60,59 @@`\n\n`6060``-----END DH PARAMETERS-----``6161``\"\"\"``626263``+\n\n# Compromised eMudhra intermediate CA (EM OV TLS CA - G3C, d=4) and cross-signed root (emSign Root TLS CA - G3),``64``+\n\n# see https://emudhra.we-have-a-problem.com/``65``+\n\nEMUDHRA_CHAIN_PEM = b\"\"\"``66``+\n\n-----BEGIN PRIVATE KEY-----``67``+\n\nMIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAAAAAAAAAAAAAAAAAA``68``+\n\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAShZANiAAQTglHNUqyS``69``+\n\nmMHIqtl3Mh3rl+cJvQtMoKylXcitUdz8nRWJoVl+OlEg4e/WMcY+GDXKyuKYaaYu``70``+\n\nFjHoooGBq1ZhbcRdkYq8CfOrDmPPeSqk3O1zh743u6VpVJ8cArJw7Wc=``71``+\n\n-----END PRIVATE KEY-----``72``+\n\n-----BEGIN CERTIFICATE-----``73``+\n\nMIIDaDCCAu6gAwIBAgIPKWkmwiejoVJjkrGUgqUEMAoGCCqGSM49BAMDMFYxCzAJ``74``+\n\nBgNVBAYTAklOMSUwIwYDVQQKDBxlTXVkaHJhIFRlY2hub2xvZ2llcyBMaW1pdGVk``75``+\n\nMSAwHgYDVQQDDBdlbVNpZ24gUm9vdCBUTFMgQ0EgLSBHMzAeFw0yNTA0MzAxNTM3``76``+\n\nNDFaFw00MDA0MjgxODMwMDBaMEAxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtlTXVk``77``+\n\naHJhIEluYzEbMBkGA1UEAwwSRU0gT1YgVExTIENBIC0gRzNDMHYwEAYHKoZIzj0C``78``+\n\nAQYFK4EEACIDYgAEE4JRzVKskpjByKrZdzId65fnCb0LTKCspV3IrVHc/J0ViaFZ``79``+\n\nfjpRIOHv1jHGPhg1ysrimGmmLhYx6KKBgatWYW3EXZGKvAnzqw5jz3kqpNztc4e+``80``+\n\nN7ulaVSfHAKycO1no4IBljCCAZIwHwYDVR0jBBgwFoAU4TqrIXzx401UrtRyt/2L``81``+\n\nWUIgkFQwHQYDVR0OBBYEFDTq6gzryQra+dDF4u2beMmHnhtsMB0GA1UdJQQWMBQG``82``+\n\nCCsGAQUFBwMBBggrBgEFBQcDAjBdBgNVHSAEVjBUMDkGCysGAQQBg44hAQABMCow``83``+\n\nKAYIKwYBBQUHAgEWHGh0dHA6Ly9yZXBvc2l0b3J5LmVtc2lnbi5jb20wDQYLKwYB``84``+\n\nBAGDjiEBAm4wCAYGZ4EMAQICMHUGCCsGAQUFBwEBBGkwZzAkBggrBgEFBQcwAYYY``85``+\n\naHR0cDovL29jc3AtYy5lbXNpZ24uY29tMD8GCCsGAQUFBzAChjNodHRwOi8vcmVw``86``+\n\nb3NpdG9yeS5lbXNpZ24uY29tL2NlcnRzL0VNT1ZUTFNDQUczQy5wN2MwNwYDVR0f``87``+\n\nBDAwLjAsoCqgKIYmaHR0cDovL2NybC5lbXNpZ24uY29tLz9yb290dGxzY2FnMy5j``88``+\n\ncmwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwCgYIKoZIzj0E``89``+\n\nAwMDaAAwZQIxAMSZt2xsPeumRdeSMSQ3CbzIZeQ/q7GDCWfeE1Pq+mhgA6gRM44c``90``+\n\nNVF3xJ+wsxJk+wIwFJbaDMokD8Ei6eNOiA8yUMYvfzQyngmrhZQMdPCK1SewrR79``91``+\n\n4rSb9vGqxZzelQth``92``+\n\n-----END CERTIFICATE-----``93``+\n\n-----BEGIN CERTIFICATE-----``94``+\n\nMIIDdDCCAvmgAwIBAgIQAJYaPvsTWVdu0EAFtGhKWzAKBggqhkjOPQQDAzBrMQsw``95``+\n\nCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhy``96``+\n\nYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290``97``+\n\nIENBIC0gRzMwHhcNMjQwNzExMTU0MzM2WhcNMzkwNzA5MTgzMDAwWjBWMQswCQYD``98``+\n\nVQQGEwJJTjElMCMGA1UECgwcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg``99``+\n\nMB4GA1UEAwwXZW1TaWduIFJvb3QgVExTIENBIC0gRzMwdjAQBgcqhkjOPQIBBgUr``100``+\n\ngQQAIgNiAARfD9w/q1cWxL6D9bMGH6CQ4u+gAV6GN9s+PwQx9Bl4hC+0iU8QOk8m``101``+\n\nWO/RwXQy10DCSxT8vSIJClHKp+Ao4qJKdYeV0SwZ7LMQziyLfxIUOY6Grja/sQFw``102``+\n\nLKYf8EdDXAyjggF1MIIBcTAfBgNVHSMEGDAWgBR8XQKEE9TMipuBzhccLikenEhj``103``+\n\nQjAdBgNVHQ4EFgQU4TqrIXzx401UrtRyt/2LWUIgkFQwHQYDVR0lBBYwFAYIKwYB``104``+\n\nBQUHAwEGCCsGAQUFBwMCMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIB``105``+\n\nFhxodHRwOi8vcmVwb3NpdG9yeS5lbXNpZ24uY29tMHgGCCsGAQUFBwEBBGwwajAi``106``+\n\nBggrBgEFBQcwAYYWaHR0cDovL29jc3AuZW1zaWduLmNvbTBEBggrBgEFBQcwAoY4``107``+\n\naHR0cDovL3JlcG9zaXRvcnkuZW1zaWduLmNvbS9jZXJ0cy9lbVNpZ25FQ0NSb290``108``+\n\nQ0FHMy5jcnQwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbXNpZ24uY29t``109``+\n\nP1Jvb3RDQUczLmNybDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB``110``+\n\nATAKBggqhkjOPQQDAwNpADBmAjEAt9CIpRGp46QHQYDUBnLKw+vvK0/h9vmilEAg``111``+\n\nTroUl/anH4x2rXHqiCtBTBfgKDegAjEA8WpG1LTZdAIL0FSYqxXeREaeTSxEofM0``112``+\n\n1jJH3jGvCXC79LU9UPJ2o3TU+UIj2gMV``113``+\n\n-----END CERTIFICATE-----``114``+\n\n\"\"\"``115``+``6311664117``class Cert(serializable.Serializable):``65118``\"\"\"Representation of a (TLS) certificate.\"\"\"`\n\n``\n\n`@@ -312,7 +365,7 @@ def _fix_legacy_sans(sans: Iterable[x509.GeneralName] | list[str]) -> x509.Gener`\n\n`312365313366314367``def dummy_cert(``315``-\n\nprivkey: rsa.RSAPrivateKey,``368``+\n\nprivkey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey,``316369``cacert: x509.Certificate,``317370``commonname: str | None,``318371``sans: Iterable[x509.GeneralName],`\n\n``\n\n`@@ -407,7 +460,7 @@ def dummy_cert(`\n\n`407460408461409462``def dummy_crl(``410``-\n\nprivkey: rsa.RSAPrivateKey,``463``+\n\nprivkey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey,``411464``cacert: x509.Certificate,``412465``) -> bytes:``413466``\"\"\"`\n\n``\n\n`@@ -433,7 +486,7 @@ def dummy_crl(`\n\n`433486``@dataclass(frozen = True)``434487``class CertStoreEntry:``435488``cert: Cert``436``-\n\nprivatekey: rsa.RSAPrivateKey``489``+\n\nprivatekey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey``437490``chain_file: Path | None``438491``chain_certs: list[Cert]``439492`\n\n``\n\n`@@ -451,7 +504,7 @@ class CertStore:`\n\n`451504``\"\"\"``452505453506``STORE_CAP = 100``454``-\n\ndefault_privatekey: rsa.RSAPrivateKey``507``+\n\ndefault_privatekey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey``455508``default_ca: Cert``456509``default_chain_file: Path | None``457510``default_chain_certs: list[Cert]`\n\n``\n\n`@@ -461,7 +514,7 @@ class CertStore:`\n\n`461514462515``def __init__(``463516``self,``464``-\n\ndefault_privatekey: rsa.RSAPrivateKey,``517``+\n\ndefault_privatekey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey,``465518``default_ca: Cert,``466519``default_chain_file: Path | None,``467520``default_crl: bytes,`\n\n``\n\n`@@ -730,7 +783,9 @@ def get_cert(`\n\n`730783``return entry``731784732785733``-\n\ndef load_pem_private_key(data: bytes, password: bytes | None) -> rsa.RSAPrivateKey:``786``+\n\ndef load_pem_private_key(``787``+\n\ndata: bytes, password: bytes | None``788``+\n\n) -> rsa.RSAPrivateKey | ec.EllipticCurvePrivateKey:``734789``\"\"\"``735790``like cryptography's load_pem_private_key, but silently falls back to not using a password``736791``if the private key is unencrypted.`\n",
  "authors": [
    "ahlCVA"
  ],
  "captured_at": "2026-10-22T01:26:25.644952883+00:00",
  "category": "news",
  "content_html": "<p>``</p>\n<p><code>@@ -60,6 +60,59 @@</code></p>\n<p>`6060<code>-----END DH PARAMETERS-----</code>6161``&quot;&quot;&quot;``626263``+</p>\n<h1>Compromised eMudhra intermediate CA (EM OV TLS CA - G3C, d=4) and cross-signed root (emSign Root TLS CA - G3),<code>64</code>+</h1>\n<h1>see <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://emudhra.we-have-a-problem.com/%60%6065%60%60+\">https://emudhra.we-have-a-problem.com/``65``+</a></h1>\n<p>EMUDHRA_CHAIN_PEM = b&quot;&quot;&quot;<code>66</code>+</p>\n<p>-----BEGIN PRIVATE KEY-----<code>67</code>+</p>\n<p>MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAAAAAAAAAAAAAAAAAA<code>68</code>+</p>\n<p>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAShZANiAAQTglHNUqyS<code>69</code>+</p>\n<p>mMHIqtl3Mh3rl+cJvQtMoKylXcitUdz8nRWJoVl+OlEg4e/WMcY+GDXKyuKYaaYu<code>70</code>+</p>\n<p>FjHoooGBq1ZhbcRdkYq8CfOrDmPPeSqk3O1zh743u6VpVJ8cArJw7Wc=<code>71</code>+</p>\n<p>-----END PRIVATE KEY-----<code>72</code>+</p>\n<p>-----BEGIN CERTIFICATE-----<code>73</code>+</p>\n<p>MIIDaDCCAu6gAwIBAgIPKWkmwiejoVJjkrGUgqUEMAoGCCqGSM49BAMDMFYxCzAJ<code>74</code>+</p>\n<p>BgNVBAYTAklOMSUwIwYDVQQKDBxlTXVkaHJhIFRlY2hub2xvZ2llcyBMaW1pdGVk<code>75</code>+</p>\n<p>MSAwHgYDVQQDDBdlbVNpZ24gUm9vdCBUTFMgQ0EgLSBHMzAeFw0yNTA0MzAxNTM3<code>76</code>+</p>\n<p>NDFaFw00MDA0MjgxODMwMDBaMEAxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtlTXVk<code>77</code>+</p>\n<p>aHJhIEluYzEbMBkGA1UEAwwSRU0gT1YgVExTIENBIC0gRzNDMHYwEAYHKoZIzj0C<code>78</code>+</p>\n<p>AQYFK4EEACIDYgAEE4JRzVKskpjByKrZdzId65fnCb0LTKCspV3IrVHc/J0ViaFZ<code>79</code>+</p>\n<p>fjpRIOHv1jHGPhg1ysrimGmmLhYx6KKBgatWYW3EXZGKvAnzqw5jz3kqpNztc4e+<code>80</code>+</p>\n<p>N7ulaVSfHAKycO1no4IBljCCAZIwHwYDVR0jBBgwFoAU4TqrIXzx401UrtRyt/2L<code>81</code>+</p>\n<p>WUIgkFQwHQYDVR0OBBYEFDTq6gzryQra+dDF4u2beMmHnhtsMB0GA1UdJQQWMBQG<code>82</code>+</p>\n<p>CCsGAQUFBwMBBggrBgEFBQcDAjBdBgNVHSAEVjBUMDkGCysGAQQBg44hAQABMCow<code>83</code>+</p>\n<p>KAYIKwYBBQUHAgEWHGh0dHA6Ly9yZXBvc2l0b3J5LmVtc2lnbi5jb20wDQYLKwYB<code>84</code>+</p>\n<p>BAGDjiEBAm4wCAYGZ4EMAQICMHUGCCsGAQUFBwEBBGkwZzAkBggrBgEFBQcwAYYY<code>85</code>+</p>\n<p>aHR0cDovL29jc3AtYy5lbXNpZ24uY29tMD8GCCsGAQUFBzAChjNodHRwOi8vcmVw<code>86</code>+</p>\n<p>b3NpdG9yeS5lbXNpZ24uY29tL2NlcnRzL0VNT1ZUTFNDQUczQy5wN2MwNwYDVR0f<code>87</code>+</p>\n<p>BDAwLjAsoCqgKIYmaHR0cDovL2NybC5lbXNpZ24uY29tLz9yb290dGxzY2FnMy5j<code>88</code>+</p>\n<p>cmwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwCgYIKoZIzj0E<code>89</code>+</p>\n<p>AwMDaAAwZQIxAMSZt2xsPeumRdeSMSQ3CbzIZeQ/q7GDCWfeE1Pq+mhgA6gRM44c<code>90</code>+</p>\n<p>NVF3xJ+wsxJk+wIwFJbaDMokD8Ei6eNOiA8yUMYvfzQyngmrhZQMdPCK1SewrR79<code>91</code>+</p>\n<p>4rSb9vGqxZzelQth<code>92</code>+</p>\n<p>-----END CERTIFICATE-----<code>93</code>+</p>\n<p>-----BEGIN CERTIFICATE-----<code>94</code>+</p>\n<p>MIIDdDCCAvmgAwIBAgIQAJYaPvsTWVdu0EAFtGhKWzAKBggqhkjOPQQDAzBrMQsw<code>95</code>+</p>\n<p>CQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhy<code>96</code>+</p>\n<p>YSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290<code>97</code>+</p>\n<p>IENBIC0gRzMwHhcNMjQwNzExMTU0MzM2WhcNMzkwNzA5MTgzMDAwWjBWMQswCQYD<code>98</code>+</p>\n<p>VQQGEwJJTjElMCMGA1UECgwcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg<code>99</code>+</p>\n<p>MB4GA1UEAwwXZW1TaWduIFJvb3QgVExTIENBIC0gRzMwdjAQBgcqhkjOPQIBBgUr<code>100</code>+</p>\n<p>gQQAIgNiAARfD9w/q1cWxL6D9bMGH6CQ4u+gAV6GN9s+PwQx9Bl4hC+0iU8QOk8m<code>101</code>+</p>\n<p>WO/RwXQy10DCSxT8vSIJClHKp+Ao4qJKdYeV0SwZ7LMQziyLfxIUOY6Grja/sQFw<code>102</code>+</p>\n<p>LKYf8EdDXAyjggF1MIIBcTAfBgNVHSMEGDAWgBR8XQKEE9TMipuBzhccLikenEhj<code>103</code>+</p>\n<p>QjAdBgNVHQ4EFgQU4TqrIXzx401UrtRyt/2LWUIgkFQwHQYDVR0lBBYwFAYIKwYB<code>104</code>+</p>\n<p>BQUHAwEGCCsGAQUFBwMCMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIB<code>105</code>+</p>\n<p>FhxodHRwOi8vcmVwb3NpdG9yeS5lbXNpZ24uY29tMHgGCCsGAQUFBwEBBGwwajAi<code>106</code>+</p>\n<p>BggrBgEFBQcwAYYWaHR0cDovL29jc3AuZW1zaWduLmNvbTBEBggrBgEFBQcwAoY4<code>107</code>+</p>\n<p>aHR0cDovL3JlcG9zaXRvcnkuZW1zaWduLmNvbS9jZXJ0cy9lbVNpZ25FQ0NSb290<code>108</code>+</p>\n<p>Q0FHMy5jcnQwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbXNpZ24uY29t<code>109</code>+</p>\n<p>P1Jvb3RDQUczLmNybDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB<code>110</code>+</p>\n<p>ATAKBggqhkjOPQQDAwNpADBmAjEAt9CIpRGp46QHQYDUBnLKw+vvK0/h9vmilEAg<code>111</code>+</p>\n<p>TroUl/anH4x2rXHqiCtBTBfgKDegAjEA8WpG1LTZdAIL0FSYqxXeREaeTSxEofM0<code>112</code>+</p>\n<p>1jJH3jGvCXC79LU9UPJ2o3TU+UIj2gMV<code>113</code>+</p>\n<p>-----END CERTIFICATE-----<code>114</code>+</p>\n<p>&quot;&quot;&quot;<code>115</code>+<code>6311664117</code>class Cert(serializable.Serializable):<code>65118</code>&quot;&quot;&quot;Representation of a (TLS) certificate.&quot;&quot;&quot;`</p>\n<p>``</p>\n<p><code>@@ -312,7 +365,7 @@ def _fix_legacy_sans(sans: Iterable[x509.GeneralName] | list[str]) -&gt; x509.Gener</code></p>\n<p>`312365313366314367<code>def dummy_cert(</code>315``-</p>\n<p>privkey: rsa.RSAPrivateKey,<code>368</code>+</p>\n<p>privkey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey,<code>316369</code>cacert: x509.Certificate,<code>317370</code>commonname: str | None,<code>318371</code>sans: Iterable[x509.GeneralName],`</p>\n<p>``</p>\n<p><code>@@ -407,7 +460,7 @@ def dummy_cert(</code></p>\n<p>`407460408461409462<code>def dummy_crl(</code>410``-</p>\n<p>privkey: rsa.RSAPrivateKey,<code>463</code>+</p>\n<p>privkey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey,<code>411464</code>cacert: x509.Certificate,<code>412465</code>) -&gt; bytes:<code>413466</code>&quot;&quot;&quot;`</p>\n<p>``</p>\n<p><code>@@ -433,7 +486,7 @@ def dummy_crl(</code></p>\n<p>`433486<code>@dataclass(frozen = True)</code>434487``class CertStoreEntry:``435488``cert: Cert``436``-</p>\n<p>privatekey: rsa.RSAPrivateKey<code>489</code>+</p>\n<p>privatekey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey<code>437490</code>chain_file: Path | None<code>438491</code>chain_certs: list[Cert]``439492`</p>\n<p>``</p>\n<p><code>@@ -451,7 +504,7 @@ class CertStore:</code></p>\n<p>`451504<code>&quot;&quot;&quot;</code>452505453506``STORE_CAP = 100``454``-</p>\n<p>default_privatekey: rsa.RSAPrivateKey<code>507</code>+</p>\n<p>default_privatekey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey<code>455508</code>default_ca: Cert<code>456509</code>default_chain_file: Path | None<code>457510</code>default_chain_certs: list[Cert]`</p>\n<p>``</p>\n<p><code>@@ -461,7 +514,7 @@ class CertStore:</code></p>\n<p>`461514462515<code>def __init__(</code>463516``self,``464``-</p>\n<p>default_privatekey: rsa.RSAPrivateKey,<code>517</code>+</p>\n<p>default_privatekey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey,<code>465518</code>default_ca: Cert,<code>466519</code>default_chain_file: Path | None,<code>467520</code>default_crl: bytes,`</p>\n<p>``</p>\n<p><code>@@ -730,7 +783,9 @@ def get_cert(</code></p>\n<p>`730783<code>return entry</code>731784732785733``-</p>\n<p>def load_pem_private_key(data: bytes, password: bytes | None) -&gt; rsa.RSAPrivateKey:<code>786</code>+</p>\n<p>def load_pem_private_key(<code>787</code>+</p>\n<p>data: bytes, password: bytes | None<code>788</code>+</p>\n<p>) -&gt; rsa.RSAPrivateKey | ec.EllipticCurvePrivateKey:<code>734789</code>&quot;&quot;&quot;<code>735790</code>like cryptography's load_pem_private_key, but silently falls back to not using a password<code>736791</code>if the private key is unencrypted.`</p>\n",
  "content_markdown": "``\n\n`@@ -60,6 +60,59 @@`\n\n`6060``-----END DH PARAMETERS-----``6161``\"\"\"``626263``+\n\n# Compromised eMudhra intermediate CA (EM OV TLS CA - G3C, d=4) and cross-signed root (emSign Root TLS CA - G3),``64``+\n\n# see https://emudhra.we-have-a-problem.com/``65``+\n\nEMUDHRA_CHAIN_PEM = b\"\"\"``66``+\n\n-----BEGIN PRIVATE KEY-----``67``+\n\nMIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAAAAAAAAAAAAAAAAAA``68``+\n\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAShZANiAAQTglHNUqyS``69``+\n\nmMHIqtl3Mh3rl+cJvQtMoKylXcitUdz8nRWJoVl+OlEg4e/WMcY+GDXKyuKYaaYu``70``+\n\nFjHoooGBq1ZhbcRdkYq8CfOrDmPPeSqk3O1zh743u6VpVJ8cArJw7Wc=``71``+\n\n-----END PRIVATE KEY-----``72``+\n\n-----BEGIN CERTIFICATE-----``73``+\n\nMIIDaDCCAu6gAwIBAgIPKWkmwiejoVJjkrGUgqUEMAoGCCqGSM49BAMDMFYxCzAJ``74``+\n\nBgNVBAYTAklOMSUwIwYDVQQKDBxlTXVkaHJhIFRlY2hub2xvZ2llcyBMaW1pdGVk``75``+\n\nMSAwHgYDVQQDDBdlbVNpZ24gUm9vdCBUTFMgQ0EgLSBHMzAeFw0yNTA0MzAxNTM3``76``+\n\nNDFaFw00MDA0MjgxODMwMDBaMEAxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtlTXVk``77``+\n\naHJhIEluYzEbMBkGA1UEAwwSRU0gT1YgVExTIENBIC0gRzNDMHYwEAYHKoZIzj0C``78``+\n\nAQYFK4EEACIDYgAEE4JRzVKskpjByKrZdzId65fnCb0LTKCspV3IrVHc/J0ViaFZ``79``+\n\nfjpRIOHv1jHGPhg1ysrimGmmLhYx6KKBgatWYW3EXZGKvAnzqw5jz3kqpNztc4e+``80``+\n\nN7ulaVSfHAKycO1no4IBljCCAZIwHwYDVR0jBBgwFoAU4TqrIXzx401UrtRyt/2L``81``+\n\nWUIgkFQwHQYDVR0OBBYEFDTq6gzryQra+dDF4u2beMmHnhtsMB0GA1UdJQQWMBQG``82``+\n\nCCsGAQUFBwMBBggrBgEFBQcDAjBdBgNVHSAEVjBUMDkGCysGAQQBg44hAQABMCow``83``+\n\nKAYIKwYBBQUHAgEWHGh0dHA6Ly9yZXBvc2l0b3J5LmVtc2lnbi5jb20wDQYLKwYB``84``+\n\nBAGDjiEBAm4wCAYGZ4EMAQICMHUGCCsGAQUFBwEBBGkwZzAkBggrBgEFBQcwAYYY``85``+\n\naHR0cDovL29jc3AtYy5lbXNpZ24uY29tMD8GCCsGAQUFBzAChjNodHRwOi8vcmVw``86``+\n\nb3NpdG9yeS5lbXNpZ24uY29tL2NlcnRzL0VNT1ZUTFNDQUczQy5wN2MwNwYDVR0f``87``+\n\nBDAwLjAsoCqgKIYmaHR0cDovL2NybC5lbXNpZ24uY29tLz9yb290dGxzY2FnMy5j``88``+\n\ncmwwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwCgYIKoZIzj0E``89``+\n\nAwMDaAAwZQIxAMSZt2xsPeumRdeSMSQ3CbzIZeQ/q7GDCWfeE1Pq+mhgA6gRM44c``90``+\n\nNVF3xJ+wsxJk+wIwFJbaDMokD8Ei6eNOiA8yUMYvfzQyngmrhZQMdPCK1SewrR79``91``+\n\n4rSb9vGqxZzelQth``92``+\n\n-----END CERTIFICATE-----``93``+\n\n-----BEGIN CERTIFICATE-----``94``+\n\nMIIDdDCCAvmgAwIBAgIQAJYaPvsTWVdu0EAFtGhKWzAKBggqhkjOPQQDAzBrMQsw``95``+\n\nCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhy``96``+\n\nYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290``97``+\n\nIENBIC0gRzMwHhcNMjQwNzExMTU0MzM2WhcNMzkwNzA5MTgzMDAwWjBWMQswCQYD``98``+\n\nVQQGEwJJTjElMCMGA1UECgwcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg``99``+\n\nMB4GA1UEAwwXZW1TaWduIFJvb3QgVExTIENBIC0gRzMwdjAQBgcqhkjOPQIBBgUr``100``+\n\ngQQAIgNiAARfD9w/q1cWxL6D9bMGH6CQ4u+gAV6GN9s+PwQx9Bl4hC+0iU8QOk8m``101``+\n\nWO/RwXQy10DCSxT8vSIJClHKp+Ao4qJKdYeV0SwZ7LMQziyLfxIUOY6Grja/sQFw``102``+\n\nLKYf8EdDXAyjggF1MIIBcTAfBgNVHSMEGDAWgBR8XQKEE9TMipuBzhccLikenEhj``103``+\n\nQjAdBgNVHQ4EFgQU4TqrIXzx401UrtRyt/2LWUIgkFQwHQYDVR0lBBYwFAYIKwYB``104``+\n\nBQUHAwEGCCsGAQUFBwMCMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIB``105``+\n\nFhxodHRwOi8vcmVwb3NpdG9yeS5lbXNpZ24uY29tMHgGCCsGAQUFBwEBBGwwajAi``106``+\n\nBggrBgEFBQcwAYYWaHR0cDovL29jc3AuZW1zaWduLmNvbTBEBggrBgEFBQcwAoY4``107``+\n\naHR0cDovL3JlcG9zaXRvcnkuZW1zaWduLmNvbS9jZXJ0cy9lbVNpZ25FQ0NSb290``108``+\n\nQ0FHMy5jcnQwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbXNpZ24uY29t``109``+\n\nP1Jvb3RDQUczLmNybDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB``110``+\n\nATAKBggqhkjOPQQDAwNpADBmAjEAt9CIpRGp46QHQYDUBnLKw+vvK0/h9vmilEAg``111``+\n\nTroUl/anH4x2rXHqiCtBTBfgKDegAjEA8WpG1LTZdAIL0FSYqxXeREaeTSxEofM0``112``+\n\n1jJH3jGvCXC79LU9UPJ2o3TU+UIj2gMV``113``+\n\n-----END CERTIFICATE-----``114``+\n\n\"\"\"``115``+``6311664117``class Cert(serializable.Serializable):``65118``\"\"\"Representation of a (TLS) certificate.\"\"\"`\n\n``\n\n`@@ -312,7 +365,7 @@ def _fix_legacy_sans(sans: Iterable[x509.GeneralName] | list[str]) -> x509.Gener`\n\n`312365313366314367``def dummy_cert(``315``-\n\nprivkey: rsa.RSAPrivateKey,``368``+\n\nprivkey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey,``316369``cacert: x509.Certificate,``317370``commonname: str | None,``318371``sans: Iterable[x509.GeneralName],`\n\n``\n\n`@@ -407,7 +460,7 @@ def dummy_cert(`\n\n`407460408461409462``def dummy_crl(``410``-\n\nprivkey: rsa.RSAPrivateKey,``463``+\n\nprivkey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey,``411464``cacert: x509.Certificate,``412465``) -> bytes:``413466``\"\"\"`\n\n``\n\n`@@ -433,7 +486,7 @@ def dummy_crl(`\n\n`433486``@dataclass(frozen = True)``434487``class CertStoreEntry:``435488``cert: Cert``436``-\n\nprivatekey: rsa.RSAPrivateKey``489``+\n\nprivatekey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey``437490``chain_file: Path | None``438491``chain_certs: list[Cert]``439492`\n\n``\n\n`@@ -451,7 +504,7 @@ class CertStore:`\n\n`451504``\"\"\"``452505453506``STORE_CAP = 100``454``-\n\ndefault_privatekey: rsa.RSAPrivateKey``507``+\n\ndefault_privatekey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey``455508``default_ca: Cert``456509``default_chain_file: Path | None``457510``default_chain_certs: list[Cert]`\n\n``\n\n`@@ -461,7 +514,7 @@ class CertStore:`\n\n`461514462515``def __init__(``463516``self,``464``-\n\ndefault_privatekey: rsa.RSAPrivateKey,``517``+\n\ndefault_privatekey: rsa.RSAPrivateKey | ec. EllipticCurvePrivateKey,``465518``default_ca: Cert,``466519``default_chain_file: Path | None,``467520``default_crl: bytes,`\n\n``\n\n`@@ -730,7 +783,9 @@ def get_cert(`\n\n`730783``return entry``731784732785733``-\n\ndef load_pem_private_key(data: bytes, password: bytes | None) -> rsa.RSAPrivateKey:``786``+\n\ndef load_pem_private_key(``787``+\n\ndata: bytes, password: bytes | None``788``+\n\n) -> rsa.RSAPrivateKey | ec.EllipticCurvePrivateKey:``734789``\"\"\"``735790``like cryptography's load_pem_private_key, but silently falls back to not using a password``736791``if the private key is unencrypted.`\n",
  "dateCreated": "2026-10-22T01:26:25.644952883+00:00",
  "date_created": "2026-10-21T23:51:37+00:00",
  "date_modified": "2026-10-21T23:51:37+00:00",
  "date_published": "2026-10-21T23:51:37+00:00",
  "description": "`` @@ -60,6 +60,59 @@ `6060-----END DH PARAMETERS-----6161``\"\"\"``626263``+ Compromised eMudhra intermediate CA (EM OV TLS CA - G3C, d=4) and cross-signed root (emSign Root TLS CA - G3),64+ see https://emudhra.we-have-a-problem.com/``65``+…",
  "external_url": "https://github.com/mitmproxy/mitmproxy/commit/169234499088fc2c414644a67efaed3d64ae2e3b",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/hnrss-org/2026/10/2026-10-21-mitmproxy-adds-emudhra-option.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/hnrss-org/2026/10/2026-10-21-mitmproxy-adds-emudhra-option.md"
  },
  "id": "urn:aggr:item:5869b20c14b5067287f70d772a44eeaf59a47c03",
  "isBasedOn": {
    "@id": "https://github.com/mitmproxy/mitmproxy/commit/169234499088fc2c414644a67efaed3d64ae2e3b"
  },
  "mainEntity": {
    "@id": "https://github.com/mitmproxy/mitmproxy/commit/169234499088fc2c414644a67efaed3d64ae2e3b",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/hnrss-org/2026-10-21-mitmproxy-adds-emudhra-option/#webpage"
    },
    "author": [
      {
        "@type": "Person",
        "name": "ahlCVA"
      }
    ],
    "dateModified": "2026-10-21T23:51:37+00:00",
    "datePublished": "2026-10-21T23:51:37+00:00",
    "headline": "mitmproxy adds --emudhra option",
    "image": {
      "@type": "ImageObject",
      "caption": null,
      "height": 90,
      "url": "https://opengraph.githubassets.com/58e827e143b21d85e7009a31985d2abfb0b0d00f7fe91a9cc999f01a4deddbbf/mitmproxy/mitmproxy/commit/169234499088fc2c414644a67efaed3d64ae2e3b",
      "width": 160
    },
    "timeRequired": "PT2M",
    "url": "https://github.com/mitmproxy/mitmproxy/commit/169234499088fc2c414644a67efaed3d64ae2e3b",
    "wordCount": 304
  },
  "name": "Archived snapshot: mitmproxy adds --emudhra option",
  "preview": {
    "alt": null,
    "color": null,
    "height": 90,
    "placeholder": {
      "data_url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=",
      "hash": ""
    },
    "url": "https://opengraph.githubassets.com/58e827e143b21d85e7009a31985d2abfb0b0d00f7fe91a9cc999f01a4deddbbf/mitmproxy/mitmproxy/commit/169234499088fc2c414644a67efaed3d64ae2e3b",
    "width": 160
  },
  "reading_minutes": 2,
  "replicated_at": null,
  "source": "hnrss-org",
  "source_name": "Hacker News: Front Page",
  "summary": null,
  "tags": [],
  "temporalCoverage": "2026-10-22T01:26:25.644952883+00:00",
  "title": "mitmproxy adds --emudhra option",
  "url": "https://aggr.aymericbeaumet.com/items/hnrss-org/2026-10-21-mitmproxy-adds-emudhra-option/",
  "word_count": 304
}