Generating signature using self signed certificate
I have the following sample code which I made for generating a signature using self signed certificate
public static String generateSignature(String data) throws Exception {
System.out.println("@@inside generateSignature: " + data);
String signature;
String jksFilepath = "E:\test.jks";
try {
// Adding Security Provider for PKCS 12
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
// Setting password for the e-Token
// logging into token
ks = KeyStore.getInstance("jks");
FileInputStream fileInputStream = new FileInputStream(jksFilepath);
// Loading Keystore
// System.out.println("loading keystore");
ks.load(fileInputStream, JKSPassword);
Enumeration<String> e = ks.aliases();
while (e.hasMoreElements()) {
alias = e.nextElement();
// System.out.println("Alias of the e-Token : "+ alias);
UserCert = (X509Certificate) ks.getCertificate(alias);
UserCertPubKey = (PublicKey) ks.getCertificate(alias).getPublicKey();
// System.out.println("loading Private key");
UserCertPrivKey = (PrivateKey) ks.getKey(alias, JKSPassword);
}
// Method Call to generate Signature
signature = MakeSignature(data);
return signature;
} catch (Exception e) {
e.printStackTrace();
System.out.println("generateSignature" + e.getCause());
throw new Exception();
}
}
private static String MakeSignature(String data) {
System.out.println("@@inside MakeSignature...");
try {
PrivateKey privateKey = (PrivateKey) ks.getKey(alias, JKSPassword);
myPubCert = (X509Certificate) ks.getCertificate(alias);
Store certs = new JcaCertStore(Arrays.asList(myPubCert));
CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
generator.addSignerInfoGenerator(new JcaSimpleSignerInfoGeneratorBuilder().setProvider("BC").build("SHA256withRSA", privateKey, myPubCert));
generator.addCertificates(certs);
CMSTypedData data1 = new CMSProcessableByteArray(data.getBytes());
CMSSignedData signed = generator.generate(data1, true);
BASE64Encoder encoder = new BASE64Encoder();
String signedContent = encoder.encode((byte) signed.getSignedContent().getContent());
String envelopedData = encoder.encode(signed.getEncoded());
return envelopedData;
} catch (Exception e) {
e.printStackTrace();
System.out.println("MakeSignature ==" + e.getCause());
return "";
}
}
There are some associated functions as well, but for the sake of giving brief I am not adding it.
Now I want to do the exact same things using PHP.
JKS doesnt work on PHP as its keystore for Java.
I tried open_ssl functions with different sets of encryption methods. But I am not getting the expected result which is as same as what I get via this java code ("not same" is about the bit rate and length of generated signature).
Can someone help me to implement the same signature generation in PHP, please?
java php x509certificate self-signed-certificate
|
show 2 more comments
I have the following sample code which I made for generating a signature using self signed certificate
public static String generateSignature(String data) throws Exception {
System.out.println("@@inside generateSignature: " + data);
String signature;
String jksFilepath = "E:\test.jks";
try {
// Adding Security Provider for PKCS 12
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
// Setting password for the e-Token
// logging into token
ks = KeyStore.getInstance("jks");
FileInputStream fileInputStream = new FileInputStream(jksFilepath);
// Loading Keystore
// System.out.println("loading keystore");
ks.load(fileInputStream, JKSPassword);
Enumeration<String> e = ks.aliases();
while (e.hasMoreElements()) {
alias = e.nextElement();
// System.out.println("Alias of the e-Token : "+ alias);
UserCert = (X509Certificate) ks.getCertificate(alias);
UserCertPubKey = (PublicKey) ks.getCertificate(alias).getPublicKey();
// System.out.println("loading Private key");
UserCertPrivKey = (PrivateKey) ks.getKey(alias, JKSPassword);
}
// Method Call to generate Signature
signature = MakeSignature(data);
return signature;
} catch (Exception e) {
e.printStackTrace();
System.out.println("generateSignature" + e.getCause());
throw new Exception();
}
}
private static String MakeSignature(String data) {
System.out.println("@@inside MakeSignature...");
try {
PrivateKey privateKey = (PrivateKey) ks.getKey(alias, JKSPassword);
myPubCert = (X509Certificate) ks.getCertificate(alias);
Store certs = new JcaCertStore(Arrays.asList(myPubCert));
CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
generator.addSignerInfoGenerator(new JcaSimpleSignerInfoGeneratorBuilder().setProvider("BC").build("SHA256withRSA", privateKey, myPubCert));
generator.addCertificates(certs);
CMSTypedData data1 = new CMSProcessableByteArray(data.getBytes());
CMSSignedData signed = generator.generate(data1, true);
BASE64Encoder encoder = new BASE64Encoder();
String signedContent = encoder.encode((byte) signed.getSignedContent().getContent());
String envelopedData = encoder.encode(signed.getEncoded());
return envelopedData;
} catch (Exception e) {
e.printStackTrace();
System.out.println("MakeSignature ==" + e.getCause());
return "";
}
}
There are some associated functions as well, but for the sake of giving brief I am not adding it.
Now I want to do the exact same things using PHP.
JKS doesnt work on PHP as its keystore for Java.
I tried open_ssl functions with different sets of encryption methods. But I am not getting the expected result which is as same as what I get via this java code ("not same" is about the bit rate and length of generated signature).
Can someone help me to implement the same signature generation in PHP, please?
java php x509certificate self-signed-certificate
You could call the java, as a self contained executable, from PHP :-)
– Nic3500
Nov 15 '18 at 14:37
@Nic3500 :P true but dont want to do that, if it can be done directly in PHP
– Ajeesh
Nov 15 '18 at 14:40
try this example-code.com/phpExt/jks_listContents.asp
– Sid Malani
Nov 20 '18 at 4:10
By "not same" you really mean "the Java based signature can be validated in PHP and vice versa but the signature strings don't match"?
– dpr
Nov 21 '18 at 11:31
maybe it's "just the base64 encoding" (which is applied in java (to the "dumped" key ...MakeSignature()
), but missing/invisible in php (sample) code ..)!?
– xerx593
Nov 22 '18 at 8:53
|
show 2 more comments
I have the following sample code which I made for generating a signature using self signed certificate
public static String generateSignature(String data) throws Exception {
System.out.println("@@inside generateSignature: " + data);
String signature;
String jksFilepath = "E:\test.jks";
try {
// Adding Security Provider for PKCS 12
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
// Setting password for the e-Token
// logging into token
ks = KeyStore.getInstance("jks");
FileInputStream fileInputStream = new FileInputStream(jksFilepath);
// Loading Keystore
// System.out.println("loading keystore");
ks.load(fileInputStream, JKSPassword);
Enumeration<String> e = ks.aliases();
while (e.hasMoreElements()) {
alias = e.nextElement();
// System.out.println("Alias of the e-Token : "+ alias);
UserCert = (X509Certificate) ks.getCertificate(alias);
UserCertPubKey = (PublicKey) ks.getCertificate(alias).getPublicKey();
// System.out.println("loading Private key");
UserCertPrivKey = (PrivateKey) ks.getKey(alias, JKSPassword);
}
// Method Call to generate Signature
signature = MakeSignature(data);
return signature;
} catch (Exception e) {
e.printStackTrace();
System.out.println("generateSignature" + e.getCause());
throw new Exception();
}
}
private static String MakeSignature(String data) {
System.out.println("@@inside MakeSignature...");
try {
PrivateKey privateKey = (PrivateKey) ks.getKey(alias, JKSPassword);
myPubCert = (X509Certificate) ks.getCertificate(alias);
Store certs = new JcaCertStore(Arrays.asList(myPubCert));
CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
generator.addSignerInfoGenerator(new JcaSimpleSignerInfoGeneratorBuilder().setProvider("BC").build("SHA256withRSA", privateKey, myPubCert));
generator.addCertificates(certs);
CMSTypedData data1 = new CMSProcessableByteArray(data.getBytes());
CMSSignedData signed = generator.generate(data1, true);
BASE64Encoder encoder = new BASE64Encoder();
String signedContent = encoder.encode((byte) signed.getSignedContent().getContent());
String envelopedData = encoder.encode(signed.getEncoded());
return envelopedData;
} catch (Exception e) {
e.printStackTrace();
System.out.println("MakeSignature ==" + e.getCause());
return "";
}
}
There are some associated functions as well, but for the sake of giving brief I am not adding it.
Now I want to do the exact same things using PHP.
JKS doesnt work on PHP as its keystore for Java.
I tried open_ssl functions with different sets of encryption methods. But I am not getting the expected result which is as same as what I get via this java code ("not same" is about the bit rate and length of generated signature).
Can someone help me to implement the same signature generation in PHP, please?
java php x509certificate self-signed-certificate
I have the following sample code which I made for generating a signature using self signed certificate
public static String generateSignature(String data) throws Exception {
System.out.println("@@inside generateSignature: " + data);
String signature;
String jksFilepath = "E:\test.jks";
try {
// Adding Security Provider for PKCS 12
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
// Setting password for the e-Token
// logging into token
ks = KeyStore.getInstance("jks");
FileInputStream fileInputStream = new FileInputStream(jksFilepath);
// Loading Keystore
// System.out.println("loading keystore");
ks.load(fileInputStream, JKSPassword);
Enumeration<String> e = ks.aliases();
while (e.hasMoreElements()) {
alias = e.nextElement();
// System.out.println("Alias of the e-Token : "+ alias);
UserCert = (X509Certificate) ks.getCertificate(alias);
UserCertPubKey = (PublicKey) ks.getCertificate(alias).getPublicKey();
// System.out.println("loading Private key");
UserCertPrivKey = (PrivateKey) ks.getKey(alias, JKSPassword);
}
// Method Call to generate Signature
signature = MakeSignature(data);
return signature;
} catch (Exception e) {
e.printStackTrace();
System.out.println("generateSignature" + e.getCause());
throw new Exception();
}
}
private static String MakeSignature(String data) {
System.out.println("@@inside MakeSignature...");
try {
PrivateKey privateKey = (PrivateKey) ks.getKey(alias, JKSPassword);
myPubCert = (X509Certificate) ks.getCertificate(alias);
Store certs = new JcaCertStore(Arrays.asList(myPubCert));
CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
generator.addSignerInfoGenerator(new JcaSimpleSignerInfoGeneratorBuilder().setProvider("BC").build("SHA256withRSA", privateKey, myPubCert));
generator.addCertificates(certs);
CMSTypedData data1 = new CMSProcessableByteArray(data.getBytes());
CMSSignedData signed = generator.generate(data1, true);
BASE64Encoder encoder = new BASE64Encoder();
String signedContent = encoder.encode((byte) signed.getSignedContent().getContent());
String envelopedData = encoder.encode(signed.getEncoded());
return envelopedData;
} catch (Exception e) {
e.printStackTrace();
System.out.println("MakeSignature ==" + e.getCause());
return "";
}
}
There are some associated functions as well, but for the sake of giving brief I am not adding it.
Now I want to do the exact same things using PHP.
JKS doesnt work on PHP as its keystore for Java.
I tried open_ssl functions with different sets of encryption methods. But I am not getting the expected result which is as same as what I get via this java code ("not same" is about the bit rate and length of generated signature).
Can someone help me to implement the same signature generation in PHP, please?
java php x509certificate self-signed-certificate
java php x509certificate self-signed-certificate
edited Nov 15 '18 at 14:57
Bsquare ℬℬ
3,65491535
3,65491535
asked Nov 15 '18 at 14:09
AjeeshAjeesh
1,17461636
1,17461636
You could call the java, as a self contained executable, from PHP :-)
– Nic3500
Nov 15 '18 at 14:37
@Nic3500 :P true but dont want to do that, if it can be done directly in PHP
– Ajeesh
Nov 15 '18 at 14:40
try this example-code.com/phpExt/jks_listContents.asp
– Sid Malani
Nov 20 '18 at 4:10
By "not same" you really mean "the Java based signature can be validated in PHP and vice versa but the signature strings don't match"?
– dpr
Nov 21 '18 at 11:31
maybe it's "just the base64 encoding" (which is applied in java (to the "dumped" key ...MakeSignature()
), but missing/invisible in php (sample) code ..)!?
– xerx593
Nov 22 '18 at 8:53
|
show 2 more comments
You could call the java, as a self contained executable, from PHP :-)
– Nic3500
Nov 15 '18 at 14:37
@Nic3500 :P true but dont want to do that, if it can be done directly in PHP
– Ajeesh
Nov 15 '18 at 14:40
try this example-code.com/phpExt/jks_listContents.asp
– Sid Malani
Nov 20 '18 at 4:10
By "not same" you really mean "the Java based signature can be validated in PHP and vice versa but the signature strings don't match"?
– dpr
Nov 21 '18 at 11:31
maybe it's "just the base64 encoding" (which is applied in java (to the "dumped" key ...MakeSignature()
), but missing/invisible in php (sample) code ..)!?
– xerx593
Nov 22 '18 at 8:53
You could call the java, as a self contained executable, from PHP :-)
– Nic3500
Nov 15 '18 at 14:37
You could call the java, as a self contained executable, from PHP :-)
– Nic3500
Nov 15 '18 at 14:37
@Nic3500 :P true but dont want to do that, if it can be done directly in PHP
– Ajeesh
Nov 15 '18 at 14:40
@Nic3500 :P true but dont want to do that, if it can be done directly in PHP
– Ajeesh
Nov 15 '18 at 14:40
try this example-code.com/phpExt/jks_listContents.asp
– Sid Malani
Nov 20 '18 at 4:10
try this example-code.com/phpExt/jks_listContents.asp
– Sid Malani
Nov 20 '18 at 4:10
By "not same" you really mean "the Java based signature can be validated in PHP and vice versa but the signature strings don't match"?
– dpr
Nov 21 '18 at 11:31
By "not same" you really mean "the Java based signature can be validated in PHP and vice versa but the signature strings don't match"?
– dpr
Nov 21 '18 at 11:31
maybe it's "just the base64 encoding" (which is applied in java (to the "dumped" key ...
MakeSignature()
), but missing/invisible in php (sample) code ..)!?– xerx593
Nov 22 '18 at 8:53
maybe it's "just the base64 encoding" (which is applied in java (to the "dumped" key ...
MakeSignature()
), but missing/invisible in php (sample) code ..)!?– xerx593
Nov 22 '18 at 8:53
|
show 2 more comments
2 Answers
2
active
oldest
votes
I think the PHP official document is very clear: http://php.net/manual/en/function.openssl-csr-new.php
Example #1 Creating a self-signed certificate
<?php
$dn = array(
"countryName" => "GB",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "wez@example.com"
);
// Generate a new private (and public) key pair
$privkey = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
// Generate a certificate signing request
$csr = openssl_csr_new($dn, $privkey, array('digest_alg' => 'sha256'));
// Generate a self-signed cert, valid for 365 days
$x509 = openssl_csr_sign($csr, null, $privkey, $days=365, array('digest_alg' => 'sha256'));
// Save your private key, CSR and self-signed cert for later use
openssl_csr_export($csr, $csrout) and var_dump($csrout);
openssl_x509_export($x509, $certout) and var_dump($certout);
openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout);
// Show any errors that occurred here
while (($e = openssl_error_string()) !== false) {
echo $e . "n";
}
Then you can call openssl_sign
: http://php.net/manual/en/function.openssl-sign.php , use the generated private key to sign.
If you want to use the Java(JKS)'s key in PHP code, you should export the keys first, and then use PHP function load the keys.
This didn't work as expected. Didnt got expected result. The signed content I recieved is HJEN4z2zWIhHvpNnWB6DM13j1Mxd05TnvYg47x5gVZSw2B8yRAlPK8yQtSDvd1JJbvTx4SiQN4qU5ROhB3ts9QjbShUUgtD5jLAu94GiIG9zSqtBknc5ab/CXUiJIzxOGW0OBxNme+a9SHL3Z6QjFKbtbopO0sEr3k7JYpx8wQbqrH1Zp45MYdvrcknIlpUbb4pvEZhUuMPcxuI/CpbmgdGm7Ep+DD9ecMsdVtgCmvQiLFAxOoaRa3gtr/cxrj29nIfFKAxtqHgapEb6eETM5JGwsDJEquFjbxCgtKL1XkbV9xJyTAHL7PpNWgHXzn7PZaHnKA+qX1xrgDRZNhBlNg==
– Ajeesh
Nov 20 '18 at 4:42
Please provide Minimal Reproducible Example stackoverflow.com/help/mcve
– shawn
Nov 20 '18 at 6:35
add a comment |
The following code Java and PHP takes a private key from a PKCS12 keystore (keystore.pfx
) and signs the content of the data.txt
file. Using the same keystore and data both implementations return exactly the same output:
I used plain Java only (no bouncycastle) as the java.security
classes can handle PKCS12 input very well:
public static void main(String args) throws Exception {
String keyStoreFile = "keystore.pfx";
char password = "password".toCharArray();
String dataFile = "data.txt";
PrivateKey priv = loadPrivateKey(keyStoreFile, password);
byte signature = signData(priv, dataFile);
System.out.println(Base64.getEncoder().encodeToString(signature));
}
private static byte signData(PrivateKey priv, String dataFile) throws Exception {
Signature dsa = Signature.getInstance("SHA256withRSA");
dsa.initSign(priv);
try (FileInputStream fis = new FileInputStream(dataFile);
BufferedInputStream bufin = new BufferedInputStream(fis);) {
byte buffer = new byte[1024];
int len;
while ((len = bufin.read(buffer)) >= 0) {
dsa.update(buffer, 0, len);
}
bufin.close();
byte realSig = dsa.sign();
return realSig;
}
}
private static PrivateKey loadPrivateKey(String keyStoreFile, char password) throws Exception {
try (FileInputStream fin = new FileInputStream(keyStoreFile)) {
KeyStore ks = KeyStore.getInstance("PKCS12", "SunJSSE");
ks.load(fin, password);
PrivateKey priv = (PrivateKey) ks.getKey("1", password);
return priv;
}
}
And the PHP version:
<?php
//data you want to sign
$data = file_get_contents("data.txt");
$cert_store = file_get_contents("keystore.pfx");
openssl_pkcs12_read($cert_store, $cert_info, "password");
//create signature
openssl_sign($data, $signature, $cert_info['pkey'], OPENSSL_ALGO_SHA256);
//finally encode
$r = base64_encode($signature);
print $r;
?>
I used OpenSSL to generate the PKCS12 keystore.pfx
file:
# generate new RSA private key
openssl genrsa -out private.pem 1024
# CSR and signed certificate are needed to export as PKCS12 store
openssl req -new -key private.pem -out certificate.csr
openssl x509 -req -days 365 -in certificate.csr -signkey private.pem -out certificate.crt
# export as PKCS12 keystore
openssl pkcs12 -export -out keystore.pfx -inkey private.pem -in certificate.crt -passout pass:password
You can sign the data.txt
using OpenSSL as well:
openssl dgst -sha256 -sign private.pem < data.txt | openssl base64
All version will output the same result.
If you have a JKS keystore and want to use the private key stored in this keystore, you can export the JKS keystore to PKCS12:
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.pfx
-srcstoretype JKS -deststoretype PKCS12 -deststorepass password
-srcalias alias -destalias 1
One more thing to note as this always seems to be confused:
You don't sign data using a certificate. You sign data using a (private) key. A certificate is more or less simply a piece of data signed with a private key. A self-signed certificate is signed with your own private key. While a certificate issued by a certificate authority (CA) is signed with the CA's private key.
In the above example the generated certificate signing request (CSR) and certificate and basically only created to import the private key into the PKCS12 keystore. You could use the plain private.pem
key file as well for the signing purpose, but as you were using a PKCS12 keystore I did the same.
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%2f53321299%2fgenerating-signature-using-self-signed-certificate%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
I think the PHP official document is very clear: http://php.net/manual/en/function.openssl-csr-new.php
Example #1 Creating a self-signed certificate
<?php
$dn = array(
"countryName" => "GB",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "wez@example.com"
);
// Generate a new private (and public) key pair
$privkey = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
// Generate a certificate signing request
$csr = openssl_csr_new($dn, $privkey, array('digest_alg' => 'sha256'));
// Generate a self-signed cert, valid for 365 days
$x509 = openssl_csr_sign($csr, null, $privkey, $days=365, array('digest_alg' => 'sha256'));
// Save your private key, CSR and self-signed cert for later use
openssl_csr_export($csr, $csrout) and var_dump($csrout);
openssl_x509_export($x509, $certout) and var_dump($certout);
openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout);
// Show any errors that occurred here
while (($e = openssl_error_string()) !== false) {
echo $e . "n";
}
Then you can call openssl_sign
: http://php.net/manual/en/function.openssl-sign.php , use the generated private key to sign.
If you want to use the Java(JKS)'s key in PHP code, you should export the keys first, and then use PHP function load the keys.
This didn't work as expected. Didnt got expected result. The signed content I recieved is HJEN4z2zWIhHvpNnWB6DM13j1Mxd05TnvYg47x5gVZSw2B8yRAlPK8yQtSDvd1JJbvTx4SiQN4qU5ROhB3ts9QjbShUUgtD5jLAu94GiIG9zSqtBknc5ab/CXUiJIzxOGW0OBxNme+a9SHL3Z6QjFKbtbopO0sEr3k7JYpx8wQbqrH1Zp45MYdvrcknIlpUbb4pvEZhUuMPcxuI/CpbmgdGm7Ep+DD9ecMsdVtgCmvQiLFAxOoaRa3gtr/cxrj29nIfFKAxtqHgapEb6eETM5JGwsDJEquFjbxCgtKL1XkbV9xJyTAHL7PpNWgHXzn7PZaHnKA+qX1xrgDRZNhBlNg==
– Ajeesh
Nov 20 '18 at 4:42
Please provide Minimal Reproducible Example stackoverflow.com/help/mcve
– shawn
Nov 20 '18 at 6:35
add a comment |
I think the PHP official document is very clear: http://php.net/manual/en/function.openssl-csr-new.php
Example #1 Creating a self-signed certificate
<?php
$dn = array(
"countryName" => "GB",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "wez@example.com"
);
// Generate a new private (and public) key pair
$privkey = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
// Generate a certificate signing request
$csr = openssl_csr_new($dn, $privkey, array('digest_alg' => 'sha256'));
// Generate a self-signed cert, valid for 365 days
$x509 = openssl_csr_sign($csr, null, $privkey, $days=365, array('digest_alg' => 'sha256'));
// Save your private key, CSR and self-signed cert for later use
openssl_csr_export($csr, $csrout) and var_dump($csrout);
openssl_x509_export($x509, $certout) and var_dump($certout);
openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout);
// Show any errors that occurred here
while (($e = openssl_error_string()) !== false) {
echo $e . "n";
}
Then you can call openssl_sign
: http://php.net/manual/en/function.openssl-sign.php , use the generated private key to sign.
If you want to use the Java(JKS)'s key in PHP code, you should export the keys first, and then use PHP function load the keys.
This didn't work as expected. Didnt got expected result. The signed content I recieved is HJEN4z2zWIhHvpNnWB6DM13j1Mxd05TnvYg47x5gVZSw2B8yRAlPK8yQtSDvd1JJbvTx4SiQN4qU5ROhB3ts9QjbShUUgtD5jLAu94GiIG9zSqtBknc5ab/CXUiJIzxOGW0OBxNme+a9SHL3Z6QjFKbtbopO0sEr3k7JYpx8wQbqrH1Zp45MYdvrcknIlpUbb4pvEZhUuMPcxuI/CpbmgdGm7Ep+DD9ecMsdVtgCmvQiLFAxOoaRa3gtr/cxrj29nIfFKAxtqHgapEb6eETM5JGwsDJEquFjbxCgtKL1XkbV9xJyTAHL7PpNWgHXzn7PZaHnKA+qX1xrgDRZNhBlNg==
– Ajeesh
Nov 20 '18 at 4:42
Please provide Minimal Reproducible Example stackoverflow.com/help/mcve
– shawn
Nov 20 '18 at 6:35
add a comment |
I think the PHP official document is very clear: http://php.net/manual/en/function.openssl-csr-new.php
Example #1 Creating a self-signed certificate
<?php
$dn = array(
"countryName" => "GB",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "wez@example.com"
);
// Generate a new private (and public) key pair
$privkey = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
// Generate a certificate signing request
$csr = openssl_csr_new($dn, $privkey, array('digest_alg' => 'sha256'));
// Generate a self-signed cert, valid for 365 days
$x509 = openssl_csr_sign($csr, null, $privkey, $days=365, array('digest_alg' => 'sha256'));
// Save your private key, CSR and self-signed cert for later use
openssl_csr_export($csr, $csrout) and var_dump($csrout);
openssl_x509_export($x509, $certout) and var_dump($certout);
openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout);
// Show any errors that occurred here
while (($e = openssl_error_string()) !== false) {
echo $e . "n";
}
Then you can call openssl_sign
: http://php.net/manual/en/function.openssl-sign.php , use the generated private key to sign.
If you want to use the Java(JKS)'s key in PHP code, you should export the keys first, and then use PHP function load the keys.
I think the PHP official document is very clear: http://php.net/manual/en/function.openssl-csr-new.php
Example #1 Creating a self-signed certificate
<?php
$dn = array(
"countryName" => "GB",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "wez@example.com"
);
// Generate a new private (and public) key pair
$privkey = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
// Generate a certificate signing request
$csr = openssl_csr_new($dn, $privkey, array('digest_alg' => 'sha256'));
// Generate a self-signed cert, valid for 365 days
$x509 = openssl_csr_sign($csr, null, $privkey, $days=365, array('digest_alg' => 'sha256'));
// Save your private key, CSR and self-signed cert for later use
openssl_csr_export($csr, $csrout) and var_dump($csrout);
openssl_x509_export($x509, $certout) and var_dump($certout);
openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout);
// Show any errors that occurred here
while (($e = openssl_error_string()) !== false) {
echo $e . "n";
}
Then you can call openssl_sign
: http://php.net/manual/en/function.openssl-sign.php , use the generated private key to sign.
If you want to use the Java(JKS)'s key in PHP code, you should export the keys first, and then use PHP function load the keys.
answered Nov 19 '18 at 6:45
shawnshawn
3,320618
3,320618
This didn't work as expected. Didnt got expected result. The signed content I recieved is HJEN4z2zWIhHvpNnWB6DM13j1Mxd05TnvYg47x5gVZSw2B8yRAlPK8yQtSDvd1JJbvTx4SiQN4qU5ROhB3ts9QjbShUUgtD5jLAu94GiIG9zSqtBknc5ab/CXUiJIzxOGW0OBxNme+a9SHL3Z6QjFKbtbopO0sEr3k7JYpx8wQbqrH1Zp45MYdvrcknIlpUbb4pvEZhUuMPcxuI/CpbmgdGm7Ep+DD9ecMsdVtgCmvQiLFAxOoaRa3gtr/cxrj29nIfFKAxtqHgapEb6eETM5JGwsDJEquFjbxCgtKL1XkbV9xJyTAHL7PpNWgHXzn7PZaHnKA+qX1xrgDRZNhBlNg==
– Ajeesh
Nov 20 '18 at 4:42
Please provide Minimal Reproducible Example stackoverflow.com/help/mcve
– shawn
Nov 20 '18 at 6:35
add a comment |
This didn't work as expected. Didnt got expected result. The signed content I recieved is HJEN4z2zWIhHvpNnWB6DM13j1Mxd05TnvYg47x5gVZSw2B8yRAlPK8yQtSDvd1JJbvTx4SiQN4qU5ROhB3ts9QjbShUUgtD5jLAu94GiIG9zSqtBknc5ab/CXUiJIzxOGW0OBxNme+a9SHL3Z6QjFKbtbopO0sEr3k7JYpx8wQbqrH1Zp45MYdvrcknIlpUbb4pvEZhUuMPcxuI/CpbmgdGm7Ep+DD9ecMsdVtgCmvQiLFAxOoaRa3gtr/cxrj29nIfFKAxtqHgapEb6eETM5JGwsDJEquFjbxCgtKL1XkbV9xJyTAHL7PpNWgHXzn7PZaHnKA+qX1xrgDRZNhBlNg==
– Ajeesh
Nov 20 '18 at 4:42
Please provide Minimal Reproducible Example stackoverflow.com/help/mcve
– shawn
Nov 20 '18 at 6:35
This didn't work as expected. Didnt got expected result. The signed content I recieved is HJEN4z2zWIhHvpNnWB6DM13j1Mxd05TnvYg47x5gVZSw2B8yRAlPK8yQtSDvd1JJbvTx4SiQN4qU5ROhB3ts9QjbShUUgtD5jLAu94GiIG9zSqtBknc5ab/CXUiJIzxOGW0OBxNme+a9SHL3Z6QjFKbtbopO0sEr3k7JYpx8wQbqrH1Zp45MYdvrcknIlpUbb4pvEZhUuMPcxuI/CpbmgdGm7Ep+DD9ecMsdVtgCmvQiLFAxOoaRa3gtr/cxrj29nIfFKAxtqHgapEb6eETM5JGwsDJEquFjbxCgtKL1XkbV9xJyTAHL7PpNWgHXzn7PZaHnKA+qX1xrgDRZNhBlNg==
– Ajeesh
Nov 20 '18 at 4:42
This didn't work as expected. Didnt got expected result. The signed content I recieved is HJEN4z2zWIhHvpNnWB6DM13j1Mxd05TnvYg47x5gVZSw2B8yRAlPK8yQtSDvd1JJbvTx4SiQN4qU5ROhB3ts9QjbShUUgtD5jLAu94GiIG9zSqtBknc5ab/CXUiJIzxOGW0OBxNme+a9SHL3Z6QjFKbtbopO0sEr3k7JYpx8wQbqrH1Zp45MYdvrcknIlpUbb4pvEZhUuMPcxuI/CpbmgdGm7Ep+DD9ecMsdVtgCmvQiLFAxOoaRa3gtr/cxrj29nIfFKAxtqHgapEb6eETM5JGwsDJEquFjbxCgtKL1XkbV9xJyTAHL7PpNWgHXzn7PZaHnKA+qX1xrgDRZNhBlNg==
– Ajeesh
Nov 20 '18 at 4:42
Please provide Minimal Reproducible Example stackoverflow.com/help/mcve
– shawn
Nov 20 '18 at 6:35
Please provide Minimal Reproducible Example stackoverflow.com/help/mcve
– shawn
Nov 20 '18 at 6:35
add a comment |
The following code Java and PHP takes a private key from a PKCS12 keystore (keystore.pfx
) and signs the content of the data.txt
file. Using the same keystore and data both implementations return exactly the same output:
I used plain Java only (no bouncycastle) as the java.security
classes can handle PKCS12 input very well:
public static void main(String args) throws Exception {
String keyStoreFile = "keystore.pfx";
char password = "password".toCharArray();
String dataFile = "data.txt";
PrivateKey priv = loadPrivateKey(keyStoreFile, password);
byte signature = signData(priv, dataFile);
System.out.println(Base64.getEncoder().encodeToString(signature));
}
private static byte signData(PrivateKey priv, String dataFile) throws Exception {
Signature dsa = Signature.getInstance("SHA256withRSA");
dsa.initSign(priv);
try (FileInputStream fis = new FileInputStream(dataFile);
BufferedInputStream bufin = new BufferedInputStream(fis);) {
byte buffer = new byte[1024];
int len;
while ((len = bufin.read(buffer)) >= 0) {
dsa.update(buffer, 0, len);
}
bufin.close();
byte realSig = dsa.sign();
return realSig;
}
}
private static PrivateKey loadPrivateKey(String keyStoreFile, char password) throws Exception {
try (FileInputStream fin = new FileInputStream(keyStoreFile)) {
KeyStore ks = KeyStore.getInstance("PKCS12", "SunJSSE");
ks.load(fin, password);
PrivateKey priv = (PrivateKey) ks.getKey("1", password);
return priv;
}
}
And the PHP version:
<?php
//data you want to sign
$data = file_get_contents("data.txt");
$cert_store = file_get_contents("keystore.pfx");
openssl_pkcs12_read($cert_store, $cert_info, "password");
//create signature
openssl_sign($data, $signature, $cert_info['pkey'], OPENSSL_ALGO_SHA256);
//finally encode
$r = base64_encode($signature);
print $r;
?>
I used OpenSSL to generate the PKCS12 keystore.pfx
file:
# generate new RSA private key
openssl genrsa -out private.pem 1024
# CSR and signed certificate are needed to export as PKCS12 store
openssl req -new -key private.pem -out certificate.csr
openssl x509 -req -days 365 -in certificate.csr -signkey private.pem -out certificate.crt
# export as PKCS12 keystore
openssl pkcs12 -export -out keystore.pfx -inkey private.pem -in certificate.crt -passout pass:password
You can sign the data.txt
using OpenSSL as well:
openssl dgst -sha256 -sign private.pem < data.txt | openssl base64
All version will output the same result.
If you have a JKS keystore and want to use the private key stored in this keystore, you can export the JKS keystore to PKCS12:
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.pfx
-srcstoretype JKS -deststoretype PKCS12 -deststorepass password
-srcalias alias -destalias 1
One more thing to note as this always seems to be confused:
You don't sign data using a certificate. You sign data using a (private) key. A certificate is more or less simply a piece of data signed with a private key. A self-signed certificate is signed with your own private key. While a certificate issued by a certificate authority (CA) is signed with the CA's private key.
In the above example the generated certificate signing request (CSR) and certificate and basically only created to import the private key into the PKCS12 keystore. You could use the plain private.pem
key file as well for the signing purpose, but as you were using a PKCS12 keystore I did the same.
add a comment |
The following code Java and PHP takes a private key from a PKCS12 keystore (keystore.pfx
) and signs the content of the data.txt
file. Using the same keystore and data both implementations return exactly the same output:
I used plain Java only (no bouncycastle) as the java.security
classes can handle PKCS12 input very well:
public static void main(String args) throws Exception {
String keyStoreFile = "keystore.pfx";
char password = "password".toCharArray();
String dataFile = "data.txt";
PrivateKey priv = loadPrivateKey(keyStoreFile, password);
byte signature = signData(priv, dataFile);
System.out.println(Base64.getEncoder().encodeToString(signature));
}
private static byte signData(PrivateKey priv, String dataFile) throws Exception {
Signature dsa = Signature.getInstance("SHA256withRSA");
dsa.initSign(priv);
try (FileInputStream fis = new FileInputStream(dataFile);
BufferedInputStream bufin = new BufferedInputStream(fis);) {
byte buffer = new byte[1024];
int len;
while ((len = bufin.read(buffer)) >= 0) {
dsa.update(buffer, 0, len);
}
bufin.close();
byte realSig = dsa.sign();
return realSig;
}
}
private static PrivateKey loadPrivateKey(String keyStoreFile, char password) throws Exception {
try (FileInputStream fin = new FileInputStream(keyStoreFile)) {
KeyStore ks = KeyStore.getInstance("PKCS12", "SunJSSE");
ks.load(fin, password);
PrivateKey priv = (PrivateKey) ks.getKey("1", password);
return priv;
}
}
And the PHP version:
<?php
//data you want to sign
$data = file_get_contents("data.txt");
$cert_store = file_get_contents("keystore.pfx");
openssl_pkcs12_read($cert_store, $cert_info, "password");
//create signature
openssl_sign($data, $signature, $cert_info['pkey'], OPENSSL_ALGO_SHA256);
//finally encode
$r = base64_encode($signature);
print $r;
?>
I used OpenSSL to generate the PKCS12 keystore.pfx
file:
# generate new RSA private key
openssl genrsa -out private.pem 1024
# CSR and signed certificate are needed to export as PKCS12 store
openssl req -new -key private.pem -out certificate.csr
openssl x509 -req -days 365 -in certificate.csr -signkey private.pem -out certificate.crt
# export as PKCS12 keystore
openssl pkcs12 -export -out keystore.pfx -inkey private.pem -in certificate.crt -passout pass:password
You can sign the data.txt
using OpenSSL as well:
openssl dgst -sha256 -sign private.pem < data.txt | openssl base64
All version will output the same result.
If you have a JKS keystore and want to use the private key stored in this keystore, you can export the JKS keystore to PKCS12:
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.pfx
-srcstoretype JKS -deststoretype PKCS12 -deststorepass password
-srcalias alias -destalias 1
One more thing to note as this always seems to be confused:
You don't sign data using a certificate. You sign data using a (private) key. A certificate is more or less simply a piece of data signed with a private key. A self-signed certificate is signed with your own private key. While a certificate issued by a certificate authority (CA) is signed with the CA's private key.
In the above example the generated certificate signing request (CSR) and certificate and basically only created to import the private key into the PKCS12 keystore. You could use the plain private.pem
key file as well for the signing purpose, but as you were using a PKCS12 keystore I did the same.
add a comment |
The following code Java and PHP takes a private key from a PKCS12 keystore (keystore.pfx
) and signs the content of the data.txt
file. Using the same keystore and data both implementations return exactly the same output:
I used plain Java only (no bouncycastle) as the java.security
classes can handle PKCS12 input very well:
public static void main(String args) throws Exception {
String keyStoreFile = "keystore.pfx";
char password = "password".toCharArray();
String dataFile = "data.txt";
PrivateKey priv = loadPrivateKey(keyStoreFile, password);
byte signature = signData(priv, dataFile);
System.out.println(Base64.getEncoder().encodeToString(signature));
}
private static byte signData(PrivateKey priv, String dataFile) throws Exception {
Signature dsa = Signature.getInstance("SHA256withRSA");
dsa.initSign(priv);
try (FileInputStream fis = new FileInputStream(dataFile);
BufferedInputStream bufin = new BufferedInputStream(fis);) {
byte buffer = new byte[1024];
int len;
while ((len = bufin.read(buffer)) >= 0) {
dsa.update(buffer, 0, len);
}
bufin.close();
byte realSig = dsa.sign();
return realSig;
}
}
private static PrivateKey loadPrivateKey(String keyStoreFile, char password) throws Exception {
try (FileInputStream fin = new FileInputStream(keyStoreFile)) {
KeyStore ks = KeyStore.getInstance("PKCS12", "SunJSSE");
ks.load(fin, password);
PrivateKey priv = (PrivateKey) ks.getKey("1", password);
return priv;
}
}
And the PHP version:
<?php
//data you want to sign
$data = file_get_contents("data.txt");
$cert_store = file_get_contents("keystore.pfx");
openssl_pkcs12_read($cert_store, $cert_info, "password");
//create signature
openssl_sign($data, $signature, $cert_info['pkey'], OPENSSL_ALGO_SHA256);
//finally encode
$r = base64_encode($signature);
print $r;
?>
I used OpenSSL to generate the PKCS12 keystore.pfx
file:
# generate new RSA private key
openssl genrsa -out private.pem 1024
# CSR and signed certificate are needed to export as PKCS12 store
openssl req -new -key private.pem -out certificate.csr
openssl x509 -req -days 365 -in certificate.csr -signkey private.pem -out certificate.crt
# export as PKCS12 keystore
openssl pkcs12 -export -out keystore.pfx -inkey private.pem -in certificate.crt -passout pass:password
You can sign the data.txt
using OpenSSL as well:
openssl dgst -sha256 -sign private.pem < data.txt | openssl base64
All version will output the same result.
If you have a JKS keystore and want to use the private key stored in this keystore, you can export the JKS keystore to PKCS12:
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.pfx
-srcstoretype JKS -deststoretype PKCS12 -deststorepass password
-srcalias alias -destalias 1
One more thing to note as this always seems to be confused:
You don't sign data using a certificate. You sign data using a (private) key. A certificate is more or less simply a piece of data signed with a private key. A self-signed certificate is signed with your own private key. While a certificate issued by a certificate authority (CA) is signed with the CA's private key.
In the above example the generated certificate signing request (CSR) and certificate and basically only created to import the private key into the PKCS12 keystore. You could use the plain private.pem
key file as well for the signing purpose, but as you were using a PKCS12 keystore I did the same.
The following code Java and PHP takes a private key from a PKCS12 keystore (keystore.pfx
) and signs the content of the data.txt
file. Using the same keystore and data both implementations return exactly the same output:
I used plain Java only (no bouncycastle) as the java.security
classes can handle PKCS12 input very well:
public static void main(String args) throws Exception {
String keyStoreFile = "keystore.pfx";
char password = "password".toCharArray();
String dataFile = "data.txt";
PrivateKey priv = loadPrivateKey(keyStoreFile, password);
byte signature = signData(priv, dataFile);
System.out.println(Base64.getEncoder().encodeToString(signature));
}
private static byte signData(PrivateKey priv, String dataFile) throws Exception {
Signature dsa = Signature.getInstance("SHA256withRSA");
dsa.initSign(priv);
try (FileInputStream fis = new FileInputStream(dataFile);
BufferedInputStream bufin = new BufferedInputStream(fis);) {
byte buffer = new byte[1024];
int len;
while ((len = bufin.read(buffer)) >= 0) {
dsa.update(buffer, 0, len);
}
bufin.close();
byte realSig = dsa.sign();
return realSig;
}
}
private static PrivateKey loadPrivateKey(String keyStoreFile, char password) throws Exception {
try (FileInputStream fin = new FileInputStream(keyStoreFile)) {
KeyStore ks = KeyStore.getInstance("PKCS12", "SunJSSE");
ks.load(fin, password);
PrivateKey priv = (PrivateKey) ks.getKey("1", password);
return priv;
}
}
And the PHP version:
<?php
//data you want to sign
$data = file_get_contents("data.txt");
$cert_store = file_get_contents("keystore.pfx");
openssl_pkcs12_read($cert_store, $cert_info, "password");
//create signature
openssl_sign($data, $signature, $cert_info['pkey'], OPENSSL_ALGO_SHA256);
//finally encode
$r = base64_encode($signature);
print $r;
?>
I used OpenSSL to generate the PKCS12 keystore.pfx
file:
# generate new RSA private key
openssl genrsa -out private.pem 1024
# CSR and signed certificate are needed to export as PKCS12 store
openssl req -new -key private.pem -out certificate.csr
openssl x509 -req -days 365 -in certificate.csr -signkey private.pem -out certificate.crt
# export as PKCS12 keystore
openssl pkcs12 -export -out keystore.pfx -inkey private.pem -in certificate.crt -passout pass:password
You can sign the data.txt
using OpenSSL as well:
openssl dgst -sha256 -sign private.pem < data.txt | openssl base64
All version will output the same result.
If you have a JKS keystore and want to use the private key stored in this keystore, you can export the JKS keystore to PKCS12:
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.pfx
-srcstoretype JKS -deststoretype PKCS12 -deststorepass password
-srcalias alias -destalias 1
One more thing to note as this always seems to be confused:
You don't sign data using a certificate. You sign data using a (private) key. A certificate is more or less simply a piece of data signed with a private key. A self-signed certificate is signed with your own private key. While a certificate issued by a certificate authority (CA) is signed with the CA's private key.
In the above example the generated certificate signing request (CSR) and certificate and basically only created to import the private key into the PKCS12 keystore. You could use the plain private.pem
key file as well for the signing purpose, but as you were using a PKCS12 keystore I did the same.
edited Nov 23 '18 at 5:58
answered Nov 22 '18 at 19:12
dprdpr
4,71311645
4,71311645
add a comment |
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%2f53321299%2fgenerating-signature-using-self-signed-certificate%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
You could call the java, as a self contained executable, from PHP :-)
– Nic3500
Nov 15 '18 at 14:37
@Nic3500 :P true but dont want to do that, if it can be done directly in PHP
– Ajeesh
Nov 15 '18 at 14:40
try this example-code.com/phpExt/jks_listContents.asp
– Sid Malani
Nov 20 '18 at 4:10
By "not same" you really mean "the Java based signature can be validated in PHP and vice versa but the signature strings don't match"?
– dpr
Nov 21 '18 at 11:31
maybe it's "just the base64 encoding" (which is applied in java (to the "dumped" key ...
MakeSignature()
), but missing/invisible in php (sample) code ..)!?– xerx593
Nov 22 '18 at 8:53