Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [ease-dev] [ease] Sign and Verify Script

Hi Varun,

please see my comments below

I have been researching about how to check a certificate is signed by root CA(Certifying Authority) or not. i.e., certificate of user is authenticated by third party or not? If certificate is signed by root CA, there is a certificate chain associated with that certificate, each one proving signature of previous one. We can check validity of certificate chain using CertPath class. Whether a certificate is signed by root CA or by user can thus be checked too. We need to have an updated list of all root CAs to check whether third party is accepted as CA or not.

Another question is, are we going to give support for X.509 certificate only, or we want to include PGP certificates too? I have been researching about X.509 yet.
I think X.509 would be sufficient. The typical use case will be that we have a web server somewhere that hosts signed scripts. Typical these servers already have an SSL certificate based on X.509.

We need to ask user(signer) about using which /Alias/(of private key) he wants to sign script. I have written sample implementation <https://github.com/VarunRaval48/SignCode/tree/master/java.sign/src/signature>, which by knowing place of user keystore, gets all aliases and certificate is imported.
The code sample you provided is already a good start which we could reuse later for preferences or user popups. In the beginning it will be sufficient to have non-UI code that can verify and sign scripts with a given keystore/alias/password combination. There we need to split where we put the code. Basic signing/verify functionality should go to o.e.ease, where UI components will go to o.e.ease.ui and o.e.ease.scripts.

Regarding where to place methods for checking Script signature, I have found out several things. First of all we need to check whether script is remote script or not? If remote, then we can verify signature and just extract script part and move on as usual. I think it would be nice to put these methods in /internalInject()/ method of *AbstractScriptEngine* class. Here, before calling /inject()/ method, we can perform above said operations. We can extract script from signature and pass directly the script to /inject().
/
You already dug quite deep into the code, this is well appreciated! For signature checking we do not need to query for remote scripts in first place. If code provides a signature, we could check it. Depending on - to be defined - preferences users could decide whether they want to execute unsigned content and from which source. The inject() methods of engines might be a bit too deep to add checks to. We use these methods also internally to execute dynamic code fragments which will not have a signature at all. It would be better to protect entry points to script execution, where there are currently 3:
* run targets
    class EaseLaunchDelegate

* script execution
    class ScriptImpl

* include() command
    class EnvironmentModule

By protecting these entry points we still could execute unprotected code when we inject it internally. This happens on module loading or when users call execute("code").

cheers
Christian


Back to the top