Skip to content

Instantly share code, notes, and snippets.

@MidLevel-Bot
Created May 29, 2020 00:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MidLevel-Bot/12f0f1560b9bc0f1b0f8a9a7cdcc7af6 to your computer and use it in GitHub Desktop.
Save MidLevel-Bot/12f0f1560b9bc0f1b0f8a9a7cdcc7af6 to your computer and use it in GitHub Desktop.
http://cert.midlevel.io/ Generated on 29/05/2020 00:35:07 by ::ffff:18.204.227.117

ONLY USE SELF SIGNED CERTIFICATES INTERNALLY OR FOR TESTING. USE A SERVICE LIKE LETSENCRYPT FOR REAL CERTIFICATES. THIS PROGRAM WILL GENERATE A CERTIFICATE AUTHORITY KEY PAIR AND A CERTIFICATE SIGNED BY THAT AUTHORITY. CERTIFICATES ARE ONLY VALID FOR 30 DAYS. AFTER THAT TIME YOU NEED A NEW ISSUER AND CERTIFICATE.

Quickstart Instructions (Basic Usage)

Server Instructions

ONLY DO THIS STEP ON THE SERVER. IT SHOULD NOT BE DONE ON CLIENTS. THIS STRING CONTAINS A BASE64 ENCODED PFX FILE, WHICH IS A COMBINATION OF THE CERTIFICATE AND THE PRIVATE KEY FOR THE CERTIFICATE WHICH IS USED TO SIGN KEY EXCHANGES.

In the NetworkingManager.NetworkConfig ServerBase64PfxCertificate text field. Enter the following:

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

Client instructions

To make clients trust your certificate issuer. Please do the following before connecting:

CryptographyHelper.OnValidateCertificateCallback = (certificate, hostname) =>
{
  X509Certificate2 issuerCertificate = new X509Certificate2(Convert.FromBase64String("MIIC5zCCAc+gAwIBAgIJAKhKCGCAYrw+MA0GCSqGSIb3DQEBCwUAMBkxFzAVBgNVBAMTDlVubmFtZWQgSXNzdWVyMB4XDTIwMDUyOTAwMzUwNloXDTIwMDYyODAwMzUwNlowGTEXMBUGA1UEAxMOVW5uYW1lZCBJc3N1ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9E5NGtv15H4GCYXV1IP/o4/tQehD6GKy6j9boM0ll/0FSX+T0JjuNyyAOks2o033VBAzQ+NbqdpGe6EZEai0FcgYR56hBF/NKntzYalrvAMrWa1dWj83K+j5uWqqsL6RzJiE+hm6MEEtrroWd3BxDdRAtAnAFcopSDVrAvzGXG/TXajHZan9UHF6cBMzx75CbnPMi5n3gJN1pRYh+V9QADyrHfjv+Y5Ab0N/j9lFeqTbjgdkHVESSNAJrJA6avItDdkIEZgTJGFNZ1G8tz4Ye63Bei/8BqD5HAL3Nt6raEJue907w7gq//0fgceGW6DwW6O8Us5eYnrvm8DO0QthDAgMBAAGjMjAwMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFDmCY1rETrnes3BpTnMZpC7xHKR8MA0GCSqGSIb3DQEBCwUAA4IBAQAro1KbEUmtj5wDA4NASk90k30CRqhlTXLfFYaxBbtsbAjW2gXbLj+FIQPQzKbnB+JQ+zJ/MsgHFDaif4JkX28j3vzCCkepnePHGkg2sZvTA3mHQ1Y3zdWV5BivxBJqhjIUPEx7pxaqIGHrEvINRL4e1BKTuKggnthNV2iSkr11zbDXBujuUZyvxzpDsdxlqtMaejzuZ2WB35oVQZIirVCN+W7Ss5Jt05frnC0IGrX/Z5gArOG0Q3MrH3itGLbwal9tqHr+BvknqKEulf2WpgSBeQpKmUzvUmv0OIsYrOgqe/4MlgLkFCZJ59ILm+/Tn927Pq3HCsr6M2XSmnNmYTrP"));
  X509Chain verify = new X509Chain();
  verify.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
  verify.ChainPolicy.ExtraStore.Add(issuerCertificate);
  verify.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;

  // Check if the chain accepts it. This can mean that it's from a CA we trust OR our own CA.
  bool isAcceptedByChain = verify.Build(new X509Certificate2(certificate));

  if (isAcceptedByChain)
  {
    // Validate with the last added CA, that's our CA
    return verify.ChainElements[verify.ChainElements.Count - 1].Certificate.Thumbprint == issuerCertificate.Thumbprint;
  }

  return false;
}

Details (Advanced Users Only)

Property Value
Issuer Name CN=Unnamed Issuer
Issuer Key Type RSA
Issuer Key Size 2048
Issuer Validity Start 29/05/2020 01:35:06 (UTC)
Issuer Validity End 28/06/2020 01:35:06 (UTC)
Issuer Serial Number 00A84A08608062BC3E
Issuer Thumbprint 69D68DF450EC53F5BF1FD6F8C6A6A2A9D4F499B3
Certificate Name CN=Unnamed MLAPI Development Certificate
Certificate Serial Number 55CF049D6CFB91672D0BE1EE56232FD4
Certificate Thumbprint B0F980A306EF76F1A6D0C6C25395CC6B43AE7C9D
Certificate Key Type RSA
Certificate Key Size 2048
Certificate Validity Start 29/05/2020 01:35:06 (UTC)
Certificate Validity End 28/06/2020 01:35:06 (UTC)

Keys

These are the keys that were used

Issuer Public/Private Key

<?xml version="1.0" encoding="utf-16"?>
<RSAParameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <D>b283EKlOsHE6If6QfEzLppWfC2o10UBzpKybq1R2wM90zzjHNoHF/aamqRAqd4LWGZJ+fzb5a0wgPPiGWVH+YMQ4AZt3lY2pDOSeIkpkd5IO+dpfqhus3SEpZF65UivuDxN86l3Oj2wXF0rPYx9T5Qn8U5qpLPy5uuw1/X1xm62R/3xwM6mvNKEZUe6kYgwpScvUQkSdEVVzE7DWamTNkoZ6UVw3/Lpe3fzMJT2phPqM+2GPC24/CpoBPifPoJTnGgGxrQpapxoVUdnvOqu+STQpDglwmAZmfT7Xz3v02nLXEvEE3uEfIRdo+vKKczaOOc2+77PrYfKT1SLCfy09AQ==</D>
  <DP>M/nqAR9T11FpT5xzy+MopIHWuD59xR9aNG89fiJH0bi2T4RYRbViAvIb5+m3SDqH2l7mbNPsuYKnfen7iEA5hNn9SS6v/Kau1+kjbp8ZUrAFWz931gcSKmct/oBmHFhe6GgR19EF2aja9QbyLZc5XriYwEyNKumtTDgv7TsigoE=</DP>
  <DQ>Z5+N9n/LSnpfowAbugybh8oSOTzehHTsNHZo/8wX8wzuCBGFKP7+cYORfc0umEJkAY+NI63a5srfmvyhhhcpG96uGapQoRpanvxd0lPh9X4NG5j1DkJCVwKO5DZH9yGcz4uqzBXsmxq0sOtGi8ZF6Al1OzkuW0ZgLc7wdKE+sXk=</DQ>
  <Exponent>AQAB</Exponent>
  <InverseQ>IKJTyJSuLgHwcdLLprEcuS2jtrmgXE/B+2LJsPqHr5cYPzTR/85+9Hc/XlemkZcGYo6fQSbYuEJoepTnI8jerbBYThkYzyCFb1b1zj8zpTTzY4ZfYXFcJRpHIIznCkbN2y6zaWjT3R9MDhh3KEN3v43k5WayuYCk3VTEu6CBhHA=</InverseQ>
  <Modulus>vROTRrb9eR+BgmF1dSD/6OP7UHoQ+hisuo/W6DNJZf9BUl/k9CY7jcsgDpLNqNN91QQM0PjW6naRnuhGRGotBXIGEeeoQRfzSp7c2Gpa7wDK1mtXVo/Nyvo+blqqrC+kcyYhPoZujBBLa66FndwcQ3UQLQJwBXKKUg1awL8xlxv012ox2Wp/VBxenATM8e+Qm5zzIuZ94CTdaUWIflfUAA8qx347/mOQG9Df4/ZRXqk244HZB1REkjQCayQOmryLQ3ZCBGYEyRhTWdRvLc+GHutwXov/Aag+RwC9zbeq2hCbnvdO8O4Kv/9H4HHhlug8FujvFLOXmJ675vAztELYQw==</Modulus>
  <P>3wgpnqMsciJOBpELhVrF4cUnX9itcU99MFkR6FzCCEoFENs8/xKEUlXEQxLX43f21Gpqf6mJQFZfYhA3SJ+790aV3k8Ip5gApZq3Ih5nlUjdCjAoUemTgpQlTlVk1WIgbhK1y2IRCo4MVaZyOPq8d3FQ/YY8GR9/o0y4ZsQ0/oE=</P>
  <Q>2QZ+CXi7yfx7rOD//CQsR2JaJiYWuKg09XOX24WLbhc+Lw2wTgxMtZG+oO0F97I3mQOOaJxHPtg6KnHqnunW26RSy2p4UkrnLGXxIfLhSIyaiUtNpc6XdQdHwPNN9c2SYk6OizbAwL0kpdhViGaBYH94bhITmvyoXdhjxaJe/MM=</Q>
</RSAParameters>

Certificate Public/Private Key

<?xml version="1.0" encoding="utf-16"?>
<RSAParameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <D>alBIF/dxTueJdoyue4ozfaVh2DXXTR9R1P9Sb3MHnTPIRIUEup92LTs+oQYDdAx4SO3LtfC+tQSBHXarub+m5gwRLEo/LCMvmYO2wwuKnAGZRQ7G6IpJcivqq3NI0+BfLlgCiVCMmVlHMsmvagCR8T5b13VbRHHK/l9TkBtz0TFnqcsONRAkOmKTxqpJRi6v467Na8fb345drh7H70qsOwRbgqdhX4mCLWd6dAaZnaampTInVfFec9Q2HT9QfpTNrMPCWqvw6rapWQFQijz9LHPMvEJC9fVkWRZU3l/xTGJvRxU57U10YSHMPK6oYg0afyRYOUTYpBy+jhgY/5wEIQ==</D>
  <DP>Jzyb4XdGVCyPLuEkzMhezc7AOeC9qwIvIz2f3vhFugOIvT+BwuHSsEQC6rmpqqXEjGXOfn3TlCUSiRzAEcGKeSx52RDeCsd62hJBi/mdb1E3UHZLxweFPXJ7FFHjYwj2ODIpvZQ8yEuwLE/0mdPeUY0V63P8/Xg4nwt5WT6yKxE=</DP>
  <DQ>gHEV01pR+lvmS9lGMz+Nwj6OZqwMS9lRmvLGmJ2ytvXd72lG1O/vXSJvptMWrtjnOCxd+7XvcH5CyRU1mW8cMoigswfHsY2ZAHNJACGPitW6+lgb1g90yVYdHSZsprYkQka0mul5OcpGm2fL9k/SYEXrgzusCuD5DKKSbBp/dv0=</DQ>
  <Exponent>AQAB</Exponent>
  <InverseQ>lOfOper7H3yLmd/1y2n7SoR8fSREVNpB+E1A+M/TqMNEFz/GJ4oJIxAr7zmGS5/il8DPpBxKWjIW4qnwps8SOBK4v5Do0uObpeEdEGfddFVgAQnYWUV8skN4cXzksO7I6+kMpbSAQZsL0Zk0Bq/zlZhAJFEQK250u8yjCiRmikc=</InverseQ>
  <Modulus>yo38so1S4UUFxp75nbyvR53CCE2iZeO9xBVPfUtiKmMF8PJFVGlyx7thimqjAGa8Y8WgnhuC8+w4KMg8fnwNjsAYPBmCGBnO05gbjpi6aUPtiHokhY2r4C/YZvxx1MEbCSXjSFjgDpIzUpJFt5JM2QT+kdkcqo40AgqkWfSCL3fV/aCOXaaOu+LCdKrNYshYjOQnbDVNUeYMWaBuOfwI7XYAwBnnqeV0s7M/Dy5iIjwdV53+/5BYdubBzFmSF7rYttQ2QRYeTrjI5D5X/xkXFx/8Tf4Pv3pmWpc87xrolCyFIVpQL3AX5x84MFtP/V8VC93ykareH3dZozhWiRpxsQ==</Modulus>
  <P>6uEdCzRHuhrUNqGGK+T1k0HlE8ISC8geDrPX42HaFDuNKOE0V0GyapjoTnzgNL1KyJcHrTsRWYbAExBlWtu2663C9X6HhWnq5dYuicEtwmx3Yy7FqpaAQadXzKxH8tHq43s6c78krWvaxhslXIPikf2+KlJRyDBnzfZIIXxioAU=</P>
  <Q>3MTDhB0DfTkRLffc5wdfQDjVATffxZk+mM0H1MpUgehHT9FrZ/VykaqrcewYo9+t08dLT+BicbvmuVI31p6OeEERQnBRRptd6ORlFTM0s4PvwKPdQzyIaG+2HRh4rCq/hx0A/3F5nrynbs3/CK4IZKi1jj6+oQXtkvKnIXLodr0=</Q>
</RSAParameters>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment