pulsar: Apache pulsar Encryption failed using ecdsa
Trying to send encrypted messages from producer but got this exception:
org.apache.pulsar.client.api.PulsarClientException: java.util.concurrent.ExecutionException: org.apache.pulsar.client.api.PulsarClientException: java.lang.NoSuchMethodError: 'org.apache.pulsar.shade.io.netty.buffer.ByteBuf org.apache.pulsar.client.api.MessageCrypto.encrypt(java.util.Set, org.apache.pulsar.client.api.CryptoKeyReader, java.util.function.Supplier, org.apache.pulsar.shade.io.netty.buffer.ByteBuf)'
at org.apache.pulsar.client.api.PulsarClientException.unwrap(PulsarClientException.java:719)
at org.apache.pulsar.client.impl.ProducerBase.send(ProducerBase.java:117)
at org.apache.pulsar.client.impl.TypedMessageBuilderImpl.send(TypedMessageBuilderImpl.java:89)
at org.apache.pulsar.client.impl.ProducerBase.send(ProducerBase.java:63)
at com.vz.vmb.PulsarProducer.main(PulsarProducer.java:59)
Caused by: java.util.concurrent.ExecutionException: org.apache.pulsar.client.api.PulsarClientException: java.lang.NoSuchMethodError: 'org.apache.pulsar.shade.io.netty.buffer.ByteBuf org.apache.pulsar.client.api.MessageCrypto.encrypt(java.util.Set, org.apache.pulsar.client.api.CryptoKeyReader, java.util.function.Supplier, org.apache.pulsar.shade.io.netty.buffer.ByteBuf)'
at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)
at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999)
at org.apache.pulsar.client.impl.ProducerBase.send(ProducerBase.java:115)
... 3 more
Caused by: org.apache.pulsar.client.api.PulsarClientException: java.lang.NoSuchMethodError: 'org.apache.pulsar.shade.io.netty.buffer.ByteBuf org.apache.pulsar.client.api.MessageCrypto.encrypt(java.util.Set, org.apache.pulsar.client.api.CryptoKeyReader, java.util.function.Supplier, org.apache.pulsar.shade.io.netty.buffer.ByteBuf)'
at org.apache.pulsar.client.impl.ProducerImpl.sendAsync(ProducerImpl.java:477)
at org.apache.pulsar.client.impl.ProducerImpl.internalSendAsync(ProducerImpl.java:269)
at org.apache.pulsar.client.impl.ProducerBase.send(ProducerBase.java:108)
... 3 more
Caused by: java.lang.NoSuchMethodError: 'org.apache.pulsar.shade.io.netty.buffer.ByteBuf org.apache.pulsar.client.api.MessageCrypto.encrypt(java.util.Set, org.apache.pulsar.client.api.CryptoKeyReader, java.util.function.Supplier, org.apache.pulsar.shade.io.netty.buffer.ByteBuf)'
at org.apache.pulsar.client.impl.ProducerImpl.encryptMessage(ProducerImpl.java:567)
at org.apache.pulsar.client.impl.ProducerImpl.sendAsync(ProducerImpl.java:446)
... 5 more
--------------------------------------------------------------------------------------------------
Followed the Encryption from the apache pulsar documentation and the sampleProducerConsumerTest class from pulsar client.
Generated a public key and the private key
created a Pulsarclient object
--------------------------------------------------------------------------------------------------
client = PulsarClient.builder()
.serviceUrl("pulsar+ssl:xxxxxxxxxxxxxxxxx:6651/")
.tlsTrustCertsFilePath("src/main/resources/ca.cert.pem")
.enableTls(true)
.authentication("org.apache.pulsar.client.impl.auth.AuthenticationTls", authParams).build();
Producer<byte[]> producer = client.newProducer()
.topic("persistent://tenant/namespace/nonprod-topic-1")
.cryptoKeyReader(new RawFileKeyReader("src/main/resources/test_ecdsa_pubkey.pem", "src/main/resources/test_ecdsa_privkey.pem"))
.addEncryptionKey("src/main/resources/test_ecdsa_pubkey.pem")
.enableBatching(false)
.create();
String message = "Test Messages";
int i = 2;
while(true) {
i = i + 1;
message = message + " Mesage # " + i;
producer.send(message.getBytes());
System.out.println("Printing the Messages " + message);
producer.flush();
if (i == 100) {
break;
}
}
producer.close();
client.close();
To Reproduce Steps to reproduce the behavior:
1. Go to ' create a producer class in java. add the serviceUrl, generate public key, generate private key, use certificates for tls authentication, and make the topic as encryption enabled'
2. Click on ' run the sample producer'
3. Scroll down to ' console'
4. See error
'org.apache.pulsar.client.api.PulsarClientException: java.util.concurrent.ExecutionException: org.apache.pulsar.client.api.PulsarClientException: java.lang.NoSuchMethodError: 'org.apache.pulsar.shade.io.netty.buffer.ByteBuf org.apache.pulsar.client.api.MessageCrypto.encrypt(java.util.Set, org.apache.pulsar.client.api.CryptoKeyReader, java.util.function.Supplier, org.apache.pulsar.shade.io.netty.buffer.ByteBuf)'
Expected behavior send message encrypted messages using ecdsa public key and private key,
Desktop (please complete the following information):
- OS: [e.g. iOS] : I am using macOs Mojave version(10.14.6) -Pulsar-client version: 2.5.1
Additional context here are my dependecies i used
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-io-netty</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client-messagecrypto-bc</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client-admin</artifactId>
<version>2.5.1</version>
</dependency>
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 20 (13 by maintainers)
Commits related to this issue
- add pulsar-client-messagecrypto-bc into pulsar-client module (#7447) Fixes #6834 ### Motivation `MessageCryptoBc` implements the interface of `MessageCrypto`. while `pulsar-client` did a shade ... — committed to apache/pulsar by jiazhai 4 years ago
- add pulsar-client-messagecrypto-bc into pulsar-client module (#7447) Fixes #6834 ### Motivation `MessageCryptoBc` implements the interface of `MessageCrypto`. while `pulsar-client` did a shade ... — committed to streamnative/pulsar by jiazhai 4 years ago
- add pulsar-client-messagecrypto-bc into pulsar-client module (#7447) Fixes #6834 ### Motivation `MessageCryptoBc` implements the interface of `MessageCrypto`. while `pulsar-client` did a shade ... — committed to apache/pulsar by jiazhai 4 years ago
- add pulsar-client-messagecrypto-bc into pulsar-client module (#7447) Fixes #6834 ### Motivation `MessageCryptoBc` implements the interface of `MessageCrypto`. while `pulsar-client` did a shade ... — committed to huangdx0726/pulsar by jiazhai 4 years ago
- [Java shade client] Add encryption integration test (#8850) ### Motivation Currently, there are no encryption integration test cases in the shaded client test. #6834 needs more test cases to addres... — committed to apache/pulsar by RobertIndie 4 years ago
- [Java shade client] Add encryption integration test (#8850) ### Motivation Currently, there are no encryption integration test cases in the shaded client test. #6834 needs more test cases to addres... — committed to apache/pulsar by RobertIndie 4 years ago
Not sure how you got those errors. With 2.5.1 I get: Class not found for org.apache.pulsar.client.impl.crypto.MessageCryptoBc Which can be resolved by adding the following dependency compile group: ‘org.apache.pulsar’, name: ‘pulsar-client-messagecrypto-bc’, version: ‘2.5.1’