Skip to content

Commit 8ecbce6

Browse files
committed
Switch out sha512.badssl.com, as the certificate has expired
Sha256.badssl.com currently works, and seems more likely to work in future, as it's set up with Let's Encrypt (so presumably renewing automatically) instead of using Digicert.
1 parent 7ca6909 commit 8ecbce6

File tree

4 files changed

+46
-37
lines changed

4 files changed

+46
-37
lines changed

app/src/main/java/tech/httptoolkit/pinning_demo/MainActivity.kt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import java.security.cert.CertificateFactory
2828
import java.security.cert.X509Certificate
2929
import javax.net.ssl.*
3030

31-
const val DIGICERT_ROOT_SHA256 = "5kJvNEMw0KjrCAu7eXY5HZdvyCS13BbA0VJG1RSP91w="
31+
const val LETS_ENCRYPT_ROOT_SHA256 = "NgJeUutmfGsIONh0XaovCA5VJ05uv2gCb27pUOpTPxU="
3232

3333
class MainActivity : AppCompatActivity() {
3434
override fun onCreate(savedInstanceState: Bundle?) {
@@ -105,7 +105,7 @@ class MainActivity : AppCompatActivity() {
105105
onStart(R.id.config_pinned)
106106
try {
107107
// Pinned by hash in network config:
108-
val mURL = URL("https://sha512.badssl.com")
108+
val mURL = URL("https://sha256.badssl.com")
109109
with(mURL.openConnection() as HttpsURLConnection) {
110110
println("URL: ${this.url}")
111111
println("Response Code: ${this.responseCode}")
@@ -124,16 +124,16 @@ class MainActivity : AppCompatActivity() {
124124
onStart(R.id.okhttp_pinned)
125125

126126
try {
127-
val hostname = "sha512.badssl.com"
127+
val hostname = "sha256.badssl.com"
128128
val certificatePinner = CertificatePinner.Builder()
129-
.add(hostname, "sha256/${DIGICERT_ROOT_SHA256}")
129+
.add(hostname, "sha256/${LETS_ENCRYPT_ROOT_SHA256}")
130130
.build()
131131

132132
val client = OkHttpClient.Builder()
133133
.certificatePinner(certificatePinner)
134134
.build()
135135
val request = Request.Builder()
136-
.url("https://sha512.badssl.com")
136+
.url("https://sha256.badssl.com")
137137
.build();
138138

139139
client.newCall(request).execute().use { response ->
@@ -155,7 +155,7 @@ class MainActivity : AppCompatActivity() {
155155
try {
156156
// Create an HTTP client that only trusts our specific certificate:
157157
val cf = CertificateFactory.getInstance("X.509")
158-
val caStream = BufferedInputStream(resources.openRawResource(R.raw.digicert_ca))
158+
val caStream = BufferedInputStream(resources.openRawResource(R.raw.lets_encrypt_isrg_root))
159159
val ca = cf.generateCertificate(caStream)
160160
caStream.close()
161161

@@ -179,7 +179,7 @@ class MainActivity : AppCompatActivity() {
179179
// Make a request using that client:
180180
val stringRequest = StringRequest(
181181
com.android.volley.Request.Method.GET,
182-
"https://sha512.badssl.com",
182+
"https://sha256.badssl.com",
183183
{ _ ->
184184
println("Volley success")
185185
this@MainActivity.onSuccess(R.id.volley_pinned)
@@ -201,10 +201,10 @@ class MainActivity : AppCompatActivity() {
201201
GlobalScope.launch(Dispatchers.IO) {
202202
onStart(R.id.trustkit_pinned)
203203
try {
204-
val mURL = URL("https://sha512.badssl.com")
204+
val mURL = URL("https://sha256.badssl.com")
205205
with(mURL.openConnection() as HttpsURLConnection) {
206206
this.sslSocketFactory = TrustKit.getInstance().getSSLSocketFactory(
207-
"sha512.badssl.com"
207+
"sha256.badssl.com"
208208
)
209209
println("URL: ${this.url}")
210210
println("Response Code: ${this.responseCode}")
@@ -235,19 +235,19 @@ class MainActivity : AppCompatActivity() {
235235
val context = SSLContext.getInstance("TLS")
236236
context.init(null, trustManager, null)
237237

238-
val socket = context.socketFactory.createSocket("sha512.badssl.com", 443) as SSLSocket
238+
val socket = context.socketFactory.createSocket("sha256.badssl.com", 443) as SSLSocket
239239

240240
val certs = socket.session.peerCertificates
241241

242-
if (!certs.any { cert -> doesCertMatchPin(DIGICERT_ROOT_SHA256, cert) }) {
242+
if (!certs.any { cert -> doesCertMatchPin(LETS_ENCRYPT_ROOT_SHA256, cert) }) {
243243
socket.close() // Close the socket immediately without sending a request
244244
throw Error("Unrecognized cert hash.")
245245
}
246246

247247
// Send a real request, just to make it clear that we trust the connection:
248248
val pw = PrintWriter(socket.outputStream)
249249
pw.println("GET / HTTP/1.1")
250-
pw.println("Host: sha512.badssl.com")
250+
pw.println("Host: sha256.badssl.com")
251251
pw.println("")
252252
pw.flush()
253253

app/src/main/res/raw/digicert_ca.pem

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
3+
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
4+
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
5+
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
6+
ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
7+
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
8+
h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
9+
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
10+
A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
11+
T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
12+
B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
13+
B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
14+
KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
15+
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
16+
jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
17+
qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
18+
rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
19+
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
20+
hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
21+
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
22+
3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
23+
NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
24+
ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
25+
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
26+
jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
27+
oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
28+
4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
29+
mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
30+
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
31+
-----END CERTIFICATE-----
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<network-security-config>
33
<domain-config>
4-
<domain includeSubdomains="false">sha512.badssl.com</domain>
4+
<domain includeSubdomains="false">sha256.badssl.com</domain>
55
<pin-set>
6-
<pin digest="SHA-256">5kJvNEMw0KjrCAu7eXY5HZdvyCS13BbA0VJG1RSP91w=</pin>
6+
<pin digest="SHA-256">NgJeUutmfGsIONh0XaovCA5VJ05uv2gCb27pUOpTPxU=</pin>
77
</pin-set>
88
<trust-anchors>
9-
<certificates src="@raw/digicert_ca" />
9+
<certificates src="@raw/lets_encrypt_isrg_root" />
1010
</trust-anchors>
1111
</domain-config>
1212
</network-security-config>

0 commit comments

Comments
 (0)