using digital certificate on pentaho
I've to call an soap web-service onn my transformatio, but when i try make lookup the spoon throw the folow message
I've already installed the digital certificate on my machine, I have the .cer archive. I don't know how to put this certificate in my transformation.
certificate pentaho-spoon pentaho-data-integration
add a comment |
I've to call an soap web-service onn my transformatio, but when i try make lookup the spoon throw the folow message
I've already installed the digital certificate on my machine, I have the .cer archive. I don't know how to put this certificate in my transformation.
certificate pentaho-spoon pentaho-data-integration
add a comment |
I've to call an soap web-service onn my transformatio, but when i try make lookup the spoon throw the folow message
I've already installed the digital certificate on my machine, I have the .cer archive. I don't know how to put this certificate in my transformation.
certificate pentaho-spoon pentaho-data-integration
I've to call an soap web-service onn my transformatio, but when i try make lookup the spoon throw the folow message
I've already installed the digital certificate on my machine, I have the .cer archive. I don't know how to put this certificate in my transformation.
certificate pentaho-spoon pentaho-data-integration
certificate pentaho-spoon pentaho-data-integration
edited Nov 25 '18 at 12:40
luiz kava
asked Nov 25 '18 at 12:20
luiz kavaluiz kava
779
779
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
I've had this problem, too - and it's tricky to figure out. Because PDI is a Java application, it does not play nicely with the operating system's built-in certificate management processes, or options to ignore certificate checking. The trick is to add the certificate to a Java keystore using keytool
I had to solve this for Windows, so here is a PowerShell script, but you should be able to adapt the idea to shell if necessary. Also, the default password for a Java certstore is "changeit" - that's not a type-o or placeholder.
Param (
[Parameter(
Mandatory = $False,
ValueFromPipeline = $False,
ValueFromPipelineByPropertyName = $False,
HelpMessage = 'Take action!')]
[switch]$doit
)
## Find the JRE folders
$jre_list = New-Object System.Collections.Generic.List[System.Object];
$program_folders = @('C:Program FilesJava', 'C:Program Files (x86)Java');
ForEach ($folder in $program_folders) {
$jre_folders = Get-ChildItem -Path $folder -ErrorAction SilentlyContinue | Where-Object {$_.Name -like 'jre*'};
ForEach ($jre in $jre_folders) {
if ((Get-ChildItem -Path $($jre.FullName) -Recurse -Filter 'keytool.exe').Count -gt 0) {
$jre_list.Add($jre);
}
}
}
## Find the certificate files
$certroot = $PSScriptRoot;
$cert_files = Get-ChildItem -Path $certroot | Where-Object {$_.Name -match '^.+.crt$' };
ForEach ($jre in $jre_list) {
Write-Host "`n == Found JRE @ $($jre.FullName)";
$keytool = "$($jre.FullName)binkeytool.exe";
$keystore = "$($jre.FullName)libsecuritycacerts";
$cmd_list = "& '$keytool' -keystore '$keystore' -storepass changeit -list";
$existing_trusts = (Invoke-Expression -Command $cmd_list).Replace('n', 'rn');
ForEach ($cert in $cert_files) {
$file = "$certroot$cert";
$alias = ($cert.Name).Replace('.crt', '');
Write-Host " >> $cert ($alias)";
ForEach ($item in $existing_trusts) {
$trust = $item.split(',')[0];
if ($trust -match $alias -or $trust -match '*.my.domain.com') {
if ($doit) {
## Remove existing entries
Write-Host " -- Removing entry for '$trust'";
$cmd_delete = ("& '$keytool' -keystore '$keystore' -storepass changeit -delete -alias $trust -noprompt").Replace("'", '"');
(Invoke-Expression -Command $cmd_delete -ErrorVariable stderr) 2>&1 | Out-Null
if (-Not $stderr) {
Write-Host ' Success';
}
Remove-Variable stderr -ErrorAction SilentlyContinue;
}
else {
Write-Host " ++ Existing entry in keystore: '$trust'";
}
}
}
if ($doit) {
## Add new entries
Write-Host " ++ Adding entry for '$alias'";
$cmd_add = ("& '$keytool' -keystore '$keystore' -storepass changeit -import -file '$file' -alias $alias -trustcacerts -noprompt").Replace("'", '"');
(Invoke-Expression -Command $cmd_add -ErrorVariable stderr) 2>&1 | Out-Null
if (-Not $stderr) {
Write-Host ' Success';
}
Remove-Variable stderr -ErrorAction SilentlyContinue;
}
}
Write-Host ' ';
}
Hi, I didn't manage do it.... o tried use keytool, I don't know how to solve it
– luiz kava
Dec 6 '18 at 4:31
@luizkava, you might be having trouble importing it due to the type. I believe that keytool works with X.509 files, but it might prefer either text (.crt) or binary (.cer) file. Try converting your .cer into one of these types before importing. Also, just changing the extension to .crt or .pfx might work. See the keytool docs for more info: docs.oracle.com/javase/8/docs/technotes/tools/windows/…
– kerry
Dec 7 '18 at 5:08
Thanks a lot friend, I'll try it
– luiz kava
Dec 7 '18 at 9:38
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53467373%2fusing-digital-certificate-on-pentaho%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I've had this problem, too - and it's tricky to figure out. Because PDI is a Java application, it does not play nicely with the operating system's built-in certificate management processes, or options to ignore certificate checking. The trick is to add the certificate to a Java keystore using keytool
I had to solve this for Windows, so here is a PowerShell script, but you should be able to adapt the idea to shell if necessary. Also, the default password for a Java certstore is "changeit" - that's not a type-o or placeholder.
Param (
[Parameter(
Mandatory = $False,
ValueFromPipeline = $False,
ValueFromPipelineByPropertyName = $False,
HelpMessage = 'Take action!')]
[switch]$doit
)
## Find the JRE folders
$jre_list = New-Object System.Collections.Generic.List[System.Object];
$program_folders = @('C:Program FilesJava', 'C:Program Files (x86)Java');
ForEach ($folder in $program_folders) {
$jre_folders = Get-ChildItem -Path $folder -ErrorAction SilentlyContinue | Where-Object {$_.Name -like 'jre*'};
ForEach ($jre in $jre_folders) {
if ((Get-ChildItem -Path $($jre.FullName) -Recurse -Filter 'keytool.exe').Count -gt 0) {
$jre_list.Add($jre);
}
}
}
## Find the certificate files
$certroot = $PSScriptRoot;
$cert_files = Get-ChildItem -Path $certroot | Where-Object {$_.Name -match '^.+.crt$' };
ForEach ($jre in $jre_list) {
Write-Host "`n == Found JRE @ $($jre.FullName)";
$keytool = "$($jre.FullName)binkeytool.exe";
$keystore = "$($jre.FullName)libsecuritycacerts";
$cmd_list = "& '$keytool' -keystore '$keystore' -storepass changeit -list";
$existing_trusts = (Invoke-Expression -Command $cmd_list).Replace('n', 'rn');
ForEach ($cert in $cert_files) {
$file = "$certroot$cert";
$alias = ($cert.Name).Replace('.crt', '');
Write-Host " >> $cert ($alias)";
ForEach ($item in $existing_trusts) {
$trust = $item.split(',')[0];
if ($trust -match $alias -or $trust -match '*.my.domain.com') {
if ($doit) {
## Remove existing entries
Write-Host " -- Removing entry for '$trust'";
$cmd_delete = ("& '$keytool' -keystore '$keystore' -storepass changeit -delete -alias $trust -noprompt").Replace("'", '"');
(Invoke-Expression -Command $cmd_delete -ErrorVariable stderr) 2>&1 | Out-Null
if (-Not $stderr) {
Write-Host ' Success';
}
Remove-Variable stderr -ErrorAction SilentlyContinue;
}
else {
Write-Host " ++ Existing entry in keystore: '$trust'";
}
}
}
if ($doit) {
## Add new entries
Write-Host " ++ Adding entry for '$alias'";
$cmd_add = ("& '$keytool' -keystore '$keystore' -storepass changeit -import -file '$file' -alias $alias -trustcacerts -noprompt").Replace("'", '"');
(Invoke-Expression -Command $cmd_add -ErrorVariable stderr) 2>&1 | Out-Null
if (-Not $stderr) {
Write-Host ' Success';
}
Remove-Variable stderr -ErrorAction SilentlyContinue;
}
}
Write-Host ' ';
}
Hi, I didn't manage do it.... o tried use keytool, I don't know how to solve it
– luiz kava
Dec 6 '18 at 4:31
@luizkava, you might be having trouble importing it due to the type. I believe that keytool works with X.509 files, but it might prefer either text (.crt) or binary (.cer) file. Try converting your .cer into one of these types before importing. Also, just changing the extension to .crt or .pfx might work. See the keytool docs for more info: docs.oracle.com/javase/8/docs/technotes/tools/windows/…
– kerry
Dec 7 '18 at 5:08
Thanks a lot friend, I'll try it
– luiz kava
Dec 7 '18 at 9:38
add a comment |
I've had this problem, too - and it's tricky to figure out. Because PDI is a Java application, it does not play nicely with the operating system's built-in certificate management processes, or options to ignore certificate checking. The trick is to add the certificate to a Java keystore using keytool
I had to solve this for Windows, so here is a PowerShell script, but you should be able to adapt the idea to shell if necessary. Also, the default password for a Java certstore is "changeit" - that's not a type-o or placeholder.
Param (
[Parameter(
Mandatory = $False,
ValueFromPipeline = $False,
ValueFromPipelineByPropertyName = $False,
HelpMessage = 'Take action!')]
[switch]$doit
)
## Find the JRE folders
$jre_list = New-Object System.Collections.Generic.List[System.Object];
$program_folders = @('C:Program FilesJava', 'C:Program Files (x86)Java');
ForEach ($folder in $program_folders) {
$jre_folders = Get-ChildItem -Path $folder -ErrorAction SilentlyContinue | Where-Object {$_.Name -like 'jre*'};
ForEach ($jre in $jre_folders) {
if ((Get-ChildItem -Path $($jre.FullName) -Recurse -Filter 'keytool.exe').Count -gt 0) {
$jre_list.Add($jre);
}
}
}
## Find the certificate files
$certroot = $PSScriptRoot;
$cert_files = Get-ChildItem -Path $certroot | Where-Object {$_.Name -match '^.+.crt$' };
ForEach ($jre in $jre_list) {
Write-Host "`n == Found JRE @ $($jre.FullName)";
$keytool = "$($jre.FullName)binkeytool.exe";
$keystore = "$($jre.FullName)libsecuritycacerts";
$cmd_list = "& '$keytool' -keystore '$keystore' -storepass changeit -list";
$existing_trusts = (Invoke-Expression -Command $cmd_list).Replace('n', 'rn');
ForEach ($cert in $cert_files) {
$file = "$certroot$cert";
$alias = ($cert.Name).Replace('.crt', '');
Write-Host " >> $cert ($alias)";
ForEach ($item in $existing_trusts) {
$trust = $item.split(',')[0];
if ($trust -match $alias -or $trust -match '*.my.domain.com') {
if ($doit) {
## Remove existing entries
Write-Host " -- Removing entry for '$trust'";
$cmd_delete = ("& '$keytool' -keystore '$keystore' -storepass changeit -delete -alias $trust -noprompt").Replace("'", '"');
(Invoke-Expression -Command $cmd_delete -ErrorVariable stderr) 2>&1 | Out-Null
if (-Not $stderr) {
Write-Host ' Success';
}
Remove-Variable stderr -ErrorAction SilentlyContinue;
}
else {
Write-Host " ++ Existing entry in keystore: '$trust'";
}
}
}
if ($doit) {
## Add new entries
Write-Host " ++ Adding entry for '$alias'";
$cmd_add = ("& '$keytool' -keystore '$keystore' -storepass changeit -import -file '$file' -alias $alias -trustcacerts -noprompt").Replace("'", '"');
(Invoke-Expression -Command $cmd_add -ErrorVariable stderr) 2>&1 | Out-Null
if (-Not $stderr) {
Write-Host ' Success';
}
Remove-Variable stderr -ErrorAction SilentlyContinue;
}
}
Write-Host ' ';
}
Hi, I didn't manage do it.... o tried use keytool, I don't know how to solve it
– luiz kava
Dec 6 '18 at 4:31
@luizkava, you might be having trouble importing it due to the type. I believe that keytool works with X.509 files, but it might prefer either text (.crt) or binary (.cer) file. Try converting your .cer into one of these types before importing. Also, just changing the extension to .crt or .pfx might work. See the keytool docs for more info: docs.oracle.com/javase/8/docs/technotes/tools/windows/…
– kerry
Dec 7 '18 at 5:08
Thanks a lot friend, I'll try it
– luiz kava
Dec 7 '18 at 9:38
add a comment |
I've had this problem, too - and it's tricky to figure out. Because PDI is a Java application, it does not play nicely with the operating system's built-in certificate management processes, or options to ignore certificate checking. The trick is to add the certificate to a Java keystore using keytool
I had to solve this for Windows, so here is a PowerShell script, but you should be able to adapt the idea to shell if necessary. Also, the default password for a Java certstore is "changeit" - that's not a type-o or placeholder.
Param (
[Parameter(
Mandatory = $False,
ValueFromPipeline = $False,
ValueFromPipelineByPropertyName = $False,
HelpMessage = 'Take action!')]
[switch]$doit
)
## Find the JRE folders
$jre_list = New-Object System.Collections.Generic.List[System.Object];
$program_folders = @('C:Program FilesJava', 'C:Program Files (x86)Java');
ForEach ($folder in $program_folders) {
$jre_folders = Get-ChildItem -Path $folder -ErrorAction SilentlyContinue | Where-Object {$_.Name -like 'jre*'};
ForEach ($jre in $jre_folders) {
if ((Get-ChildItem -Path $($jre.FullName) -Recurse -Filter 'keytool.exe').Count -gt 0) {
$jre_list.Add($jre);
}
}
}
## Find the certificate files
$certroot = $PSScriptRoot;
$cert_files = Get-ChildItem -Path $certroot | Where-Object {$_.Name -match '^.+.crt$' };
ForEach ($jre in $jre_list) {
Write-Host "`n == Found JRE @ $($jre.FullName)";
$keytool = "$($jre.FullName)binkeytool.exe";
$keystore = "$($jre.FullName)libsecuritycacerts";
$cmd_list = "& '$keytool' -keystore '$keystore' -storepass changeit -list";
$existing_trusts = (Invoke-Expression -Command $cmd_list).Replace('n', 'rn');
ForEach ($cert in $cert_files) {
$file = "$certroot$cert";
$alias = ($cert.Name).Replace('.crt', '');
Write-Host " >> $cert ($alias)";
ForEach ($item in $existing_trusts) {
$trust = $item.split(',')[0];
if ($trust -match $alias -or $trust -match '*.my.domain.com') {
if ($doit) {
## Remove existing entries
Write-Host " -- Removing entry for '$trust'";
$cmd_delete = ("& '$keytool' -keystore '$keystore' -storepass changeit -delete -alias $trust -noprompt").Replace("'", '"');
(Invoke-Expression -Command $cmd_delete -ErrorVariable stderr) 2>&1 | Out-Null
if (-Not $stderr) {
Write-Host ' Success';
}
Remove-Variable stderr -ErrorAction SilentlyContinue;
}
else {
Write-Host " ++ Existing entry in keystore: '$trust'";
}
}
}
if ($doit) {
## Add new entries
Write-Host " ++ Adding entry for '$alias'";
$cmd_add = ("& '$keytool' -keystore '$keystore' -storepass changeit -import -file '$file' -alias $alias -trustcacerts -noprompt").Replace("'", '"');
(Invoke-Expression -Command $cmd_add -ErrorVariable stderr) 2>&1 | Out-Null
if (-Not $stderr) {
Write-Host ' Success';
}
Remove-Variable stderr -ErrorAction SilentlyContinue;
}
}
Write-Host ' ';
}
I've had this problem, too - and it's tricky to figure out. Because PDI is a Java application, it does not play nicely with the operating system's built-in certificate management processes, or options to ignore certificate checking. The trick is to add the certificate to a Java keystore using keytool
I had to solve this for Windows, so here is a PowerShell script, but you should be able to adapt the idea to shell if necessary. Also, the default password for a Java certstore is "changeit" - that's not a type-o or placeholder.
Param (
[Parameter(
Mandatory = $False,
ValueFromPipeline = $False,
ValueFromPipelineByPropertyName = $False,
HelpMessage = 'Take action!')]
[switch]$doit
)
## Find the JRE folders
$jre_list = New-Object System.Collections.Generic.List[System.Object];
$program_folders = @('C:Program FilesJava', 'C:Program Files (x86)Java');
ForEach ($folder in $program_folders) {
$jre_folders = Get-ChildItem -Path $folder -ErrorAction SilentlyContinue | Where-Object {$_.Name -like 'jre*'};
ForEach ($jre in $jre_folders) {
if ((Get-ChildItem -Path $($jre.FullName) -Recurse -Filter 'keytool.exe').Count -gt 0) {
$jre_list.Add($jre);
}
}
}
## Find the certificate files
$certroot = $PSScriptRoot;
$cert_files = Get-ChildItem -Path $certroot | Where-Object {$_.Name -match '^.+.crt$' };
ForEach ($jre in $jre_list) {
Write-Host "`n == Found JRE @ $($jre.FullName)";
$keytool = "$($jre.FullName)binkeytool.exe";
$keystore = "$($jre.FullName)libsecuritycacerts";
$cmd_list = "& '$keytool' -keystore '$keystore' -storepass changeit -list";
$existing_trusts = (Invoke-Expression -Command $cmd_list).Replace('n', 'rn');
ForEach ($cert in $cert_files) {
$file = "$certroot$cert";
$alias = ($cert.Name).Replace('.crt', '');
Write-Host " >> $cert ($alias)";
ForEach ($item in $existing_trusts) {
$trust = $item.split(',')[0];
if ($trust -match $alias -or $trust -match '*.my.domain.com') {
if ($doit) {
## Remove existing entries
Write-Host " -- Removing entry for '$trust'";
$cmd_delete = ("& '$keytool' -keystore '$keystore' -storepass changeit -delete -alias $trust -noprompt").Replace("'", '"');
(Invoke-Expression -Command $cmd_delete -ErrorVariable stderr) 2>&1 | Out-Null
if (-Not $stderr) {
Write-Host ' Success';
}
Remove-Variable stderr -ErrorAction SilentlyContinue;
}
else {
Write-Host " ++ Existing entry in keystore: '$trust'";
}
}
}
if ($doit) {
## Add new entries
Write-Host " ++ Adding entry for '$alias'";
$cmd_add = ("& '$keytool' -keystore '$keystore' -storepass changeit -import -file '$file' -alias $alias -trustcacerts -noprompt").Replace("'", '"');
(Invoke-Expression -Command $cmd_add -ErrorVariable stderr) 2>&1 | Out-Null
if (-Not $stderr) {
Write-Host ' Success';
}
Remove-Variable stderr -ErrorAction SilentlyContinue;
}
}
Write-Host ' ';
}
answered Nov 29 '18 at 17:41
kerrykerry
33228
33228
Hi, I didn't manage do it.... o tried use keytool, I don't know how to solve it
– luiz kava
Dec 6 '18 at 4:31
@luizkava, you might be having trouble importing it due to the type. I believe that keytool works with X.509 files, but it might prefer either text (.crt) or binary (.cer) file. Try converting your .cer into one of these types before importing. Also, just changing the extension to .crt or .pfx might work. See the keytool docs for more info: docs.oracle.com/javase/8/docs/technotes/tools/windows/…
– kerry
Dec 7 '18 at 5:08
Thanks a lot friend, I'll try it
– luiz kava
Dec 7 '18 at 9:38
add a comment |
Hi, I didn't manage do it.... o tried use keytool, I don't know how to solve it
– luiz kava
Dec 6 '18 at 4:31
@luizkava, you might be having trouble importing it due to the type. I believe that keytool works with X.509 files, but it might prefer either text (.crt) or binary (.cer) file. Try converting your .cer into one of these types before importing. Also, just changing the extension to .crt or .pfx might work. See the keytool docs for more info: docs.oracle.com/javase/8/docs/technotes/tools/windows/…
– kerry
Dec 7 '18 at 5:08
Thanks a lot friend, I'll try it
– luiz kava
Dec 7 '18 at 9:38
Hi, I didn't manage do it.... o tried use keytool, I don't know how to solve it
– luiz kava
Dec 6 '18 at 4:31
Hi, I didn't manage do it.... o tried use keytool, I don't know how to solve it
– luiz kava
Dec 6 '18 at 4:31
@luizkava, you might be having trouble importing it due to the type. I believe that keytool works with X.509 files, but it might prefer either text (.crt) or binary (.cer) file. Try converting your .cer into one of these types before importing. Also, just changing the extension to .crt or .pfx might work. See the keytool docs for more info: docs.oracle.com/javase/8/docs/technotes/tools/windows/…
– kerry
Dec 7 '18 at 5:08
@luizkava, you might be having trouble importing it due to the type. I believe that keytool works with X.509 files, but it might prefer either text (.crt) or binary (.cer) file. Try converting your .cer into one of these types before importing. Also, just changing the extension to .crt or .pfx might work. See the keytool docs for more info: docs.oracle.com/javase/8/docs/technotes/tools/windows/…
– kerry
Dec 7 '18 at 5:08
Thanks a lot friend, I'll try it
– luiz kava
Dec 7 '18 at 9:38
Thanks a lot friend, I'll try it
– luiz kava
Dec 7 '18 at 9:38
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53467373%2fusing-digital-certificate-on-pentaho%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown