Created
January 28, 2019 14:59
-
-
Save anandprabhakar0507/4d48abbaf1ce1caebff9915d0aea870b to your computer and use it in GitHub Desktop.
(Not my own) ProtonVPN IKEv2 profile generator. Copied from https://govt.is/proton.html in case of take-down.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html xmlns="http://www.w3.org/1999/xhtml"> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |
<title>IKEv2 configurator</title> | |
</head> | |
<body> | |
<h2>Use this tool to create an 'on demand' IKEv2 profile.</h2><br />Set an OpenVPN user/pass in Dashboard first.<br />This is not your ProtonMail password.<br />For use with ProtonVPN only.<br /> | |
<form name="mainForm" method="get" id="Main"> | |
<h5><textarea id="input1" cols="20" rows="2" style="display:none;><?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
<plist version="1.0"> | |
<dict> | |
<key>PayloadContent</key> | |
<array> | |
<dict> | |
<key>PayloadCertificateFileName</key> | |
<string>ProtonVPN_ike_root.der</string> | |
<key>PayloadContent</key> | |
<data> | |
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 | |
Tlpi7A== | |
</data> | |
<key>PayloadDescription</key> | |
<string>Adds a CA root certificate</string> | |
<key>PayloadDisplayName</key> | |
<string>ProtonVPN Root CA</string> | |
<key>PayloadIdentifier</key> | |
<string>com.apple.security.root.2FF3FD67-A444-495B-9085-791BF1404185</string> | |
<key>PayloadType</key> | |
<string>com.apple.security.root</string> | |
<key>PayloadUUID</key> | |
<string>2FF3FD67-A444-495B-9085-791BF1404185</string> | |
<key>PayloadVersion</key> | |
<integer>1</integer> | |
</dict> | |
<dict> | |
<key>IKEv2</key> | |
<dict> | |
<key>AuthName</key><string></textarea><p>ProtonVPN username:<br /> | |
<input name="username" id="input2" type="text" placeholder="OpenVPN username" /><p><textarea id="input3" cols="20" rows="2" style="display:none"></string><key>AuthPassword</key><string></textarea><p>ProtonVPN password:<br /><input name="password" id="input4" type="password" placeholder="OpenVPN password" /> | |
<p><textarea id="input5" cols="20" rows="2" style="display:none"></string> | |
<key>AuthenticationMethod</key> | |
<string>None</string> | |
<key>ChildSecurityAssociationParameters</key> | |
<dict> | |
<key>DiffieHellmanGroup</key> | |
<integer>14</integer> | |
<key>EncryptionAlgorithm</key> | |
<string>AES-256</string> | |
<key>IntegrityAlgorithm</key> | |
<string>SHA2-256</string> | |
<key>LifeTimeInMinutes</key> | |
<integer>1440</integer> | |
</dict> | |
<key>DeadPeerDetectionRate</key> | |
<string>Moderate</string> | |
<key>DisableMOBIKE</key> | |
<integer>0</integer> | |
<key>DisableRedirect</key> | |
<true/> | |
<key>EnableCertificateRevocationCheck</key> | |
<integer>0</integer> | |
<key>EnablePFS</key> | |
<true/> | |
<key>ExtendedAuthEnabled</key> | |
<true/> | |
<key>IKESecurityAssociationParameters</key> | |
<dict> | |
<key>DiffieHellmanGroup</key> | |
<integer>14</integer> | |
<key>EncryptionAlgorithm</key> | |
<string>AES-256</string> | |
<key>IntegrityAlgorithm</key> | |
<string>SHA2-256</string> | |
<key>LifeTimeInMinutes</key> | |
<integer>1440</integer> | |
</dict> | |
<key>LocalIdentifier</key> | |
<string>glenn</string> | |
<key>OnDemandEnabled</key> | |
<integer>1</integer> | |
<key>OnDemandRules</key> | |
<array> | |
<dict> | |
<key>Action</key> | |
<string>Connect</string> | |
</dict> | |
</array> | |
<key>RemoteAddress</key> | |
<string></textarea> | |
<p>Server address (can be IP address):<br /><input name="server" id="input6" type="text" placeholder="au-02.protonvpn.com" /> | |
<p><textarea id="input7" cols="20" rows="2" style="display:none"></string> | |
<key>RemoteIdentifier</key> | |
<string></textarea> | |
<textarea id="input8" cols="20" rows="2" style="display:none">au-01.protonvpn.com</textarea> | |
<p><textarea id="input9" cols="20" rows="2" style="display:none"></string> | |
<key>ServerCertificateIssuerCommonName</key> | |
<string>ProtonVPN Root CA</string> | |
<key>UseConfigurationAttributeInternalIPSubnet</key> | |
<integer>0</integer> | |
</dict> | |
<key>IPv4</key> | |
<dict> | |
<key>OverridePrimary</key> | |
<integer>1</integer> | |
</dict> | |
<key>PayloadDescription</key> | |
<string>Configures VPN settings</string> | |
<key>PayloadDisplayName</key> | |
<string>VPN</string> | |
<key>PayloadIdentifier</key> | |
<string>com.apple.vpn.managed.4507F877-96A7-4B37-97F0-8CEF782D85BC</string> | |
<key>PayloadType</key> | |
<string>com.apple.vpn.managed</string> | |
<key>PayloadUUID</key> | |
<string>4507F877-96A7-4B37-97F0-8CEF782D85BC</string> | |
<key>PayloadVersion</key> | |
<integer>1</integer> | |
<key>Proxies</key> | |
<dict> | |
<key>HTTPEnable</key> | |
<integer>0</integer> | |
<key>HTTPSEnable</key> | |
<integer>0</integer> | |
</dict> | |
<key>UserDefinedName</key> | |
<string>ProtonVPN</string> | |
<key>VPNType</key> | |
<string>IKEv2</string> | |
</dict> | |
</array> | |
<key>PayloadDisplayName</key> | |
<string>ProtonVPN</string> | |
<key>PayloadIdentifier</key> | |
<string>Marcus-2.34A413E9-6555-45D5-9141-6C40E4CE0B94</string> | |
<key>PayloadRemovalDisallowed</key> | |
<false/> | |
<key>PayloadType</key> | |
<string>Configuration</string> | |
<key>PayloadUUID</key> | |
<string>AD91D423-EB50-4377-BBAE-0EB5E31F705B</string> | |
<key>PayloadVersion</key> | |
<integer>1</integer> | |
</dict> | |
</plist> | |
</textarea> | |
<button onclick="saveFormAsTextFile()">Launch Configurator</button> | |
</form> | |
<script type="text/javascript"> | |
(function() { | |
var input = document.getElementById("fileinput"); | |
input.addEventListener("change", loadFile, false); | |
function loadFile() { | |
var file, fr; | |
if (typeof window.FileReader !== 'function') { | |
alert("The file API isn't supported on this browser yet."); | |
return; | |
} | |
if (!input.files) { | |
alert("This browser doesn't seem to support the `files` property of file inputs."); | |
} else if (!input.files[0]) { | |
alert("Please select a file before clicking 'Load'"); | |
} else { | |
file = input.files[0]; | |
fr = new FileReader(); | |
fr.onload = receivedText; | |
fr.readAsText(file); | |
} | |
function receivedText() { | |
document.getElementById("input1").value = fr.result; | |
document.getElementById("input2").value = fr.result; | |
document.getElementById("input3").value = fr.result; | |
document.getElementById("input4").value = fr.result; | |
document.getElementById("input5").value = fr.result; | |
document.getElementById("input6").value = fr.result; | |
document.getElementById("input7").value = fr.result; | |
document.getElementById("input6").value = fr.result; | |
document.getElementById("input9").value = fr.result; | |
} | |
} | |
})(); | |
function saveFormAsTextFile() | |
// Based on https://thiscouldbebetter.wordpress.com/2012/12/18/loading-editing-and-saving-a-text-file-in-html5-using-javascrip/ | |
{ | |
var textToSave = | |
document.getElementById('input1').value + | |
document.getElementById('input2').value + | |
document.getElementById('input3').value + | |
document.getElementById('input4').value + | |
document.getElementById('input5').value + | |
document.getElementById('input6').value + | |
document.getElementById('input7').value + | |
document.getElementById('input6').value + | |
document.getElementById('input9').value | |
var textToSaveAsBlob = new Blob([textToSave], {type:"text/plain"}); | |
var textToSaveAsURL = window.URL.createObjectURL(textToSaveAsBlob); | |
var fileNameToSaveAs = "ProtonVPN.mobileconfig"; | |
var downloadLink = document.createElement("a"); | |
downloadLink.download = fileNameToSaveAs; | |
downloadLink.innerHTML = "Download File"; | |
downloadLink.href = textToSaveAsURL; | |
downloadLink.onclick = destroyClickedElement; | |
downloadLink.style.display = "none"; | |
document.body.appendChild(downloadLink); | |
downloadLink.click(); | |
} | |
function destroyClickedElement(event) | |
{ | |
document.body.removeChild(event.target); | |
} | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment